将新的不可变映射值附加到不可变列表
Appending new Immutable Map value to Immutable List
我在下面有一段代码,其中我需要在每次 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;
};
您正在尝试改变一个不可变列表,所以它不会改变是正常的。
如果您检查 Immutable documentation 例如push()
,您会看到它 returns 一个包含结果的新列表。因此,在您的示例中,您需要将每个 listOfFiles.push
替换为 listOfFiles = listOfFiles.push
.
或者,使用一个常规数组,您可以简单地 push()
并在最后将其转换为不可变列表。
我在下面有一段代码,其中我需要在每次 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;
};
您正在尝试改变一个不可变列表,所以它不会改变是正常的。
如果您检查 Immutable documentation 例如push()
,您会看到它 returns 一个包含结果的新列表。因此,在您的示例中,您需要将每个 listOfFiles.push
替换为 listOfFiles = listOfFiles.push
.
或者,使用一个常规数组,您可以简单地 push()
并在最后将其转换为不可变列表。