1

我有以下一段代码,其中我需要在每次 forEach 迭代中将新的不可变映射值推送到不可变列表。流程按预期进入if条件,但没有任何内容被推送到 listOfFiles 列表。forEach 打印列表末尾的控制台为 List[0]。

任何提示,关于这里应该纠正什么以便它工作正常?

代码

const formatListOfFilesObjectForAPI = (selectedListOfFileIds, allFilesData) => {

  const listOfFiles = new Immutable.List();
  selectedListOfFileIds.forEach(fileId => {
    const fileObject = allFilesData.getIn([fileId, 'result']);
    if(fileObject && fileObject.size > 0) {
      if(fileObject.get('provider') === 'intranet') {
        listOfFiles.push(new Immutable.Map({
          file_id: fileObject.get('fileId'),
          provider: fileObject.get('provider')
        }));
      } else {
        listOfFiles.push(new Immutable.Map({
          file_id: fileObject.get('fileId'),
          provider: fileObject.get('provider'),
          name: fileObject.get('basename'),
          type: fileObject.get('extension'),
          size: fileObject.get('size'),
          version: fileObject.get('version'),
        }));
      }
    } else {
      listOfFiles.push(new Immutable.Map({
        file_id: fileId,
        provider: 'intranet'
      }));
    }
  });

  console.log('listOfFiles', listOfFiles);

  return listOfFiles;
};
4

1 回答 1

1

你试图改变一个不可变的列表,所以它不会改变是正常的。

如果您查看不可变文档中的 eg push(),您会看到它返回一个带有结果的新列表。因此,在您的示例中,您需要将 every 替换listOfFiles.pushlistOfFiles = listOfFiles.push.

或者,使用常规数组,您可以简单push()地将其转换为最后的不可变列表。

于 2021-07-31T15:49:00.647 回答