在我的应用程序中,我异步获取结果并将它们作为 Immutable JS 有序映射存储在 Redux 存储中。当我从 ajax 调用收到新的 JS 对象数组时,我想附加到这个有序映射。不知何故,我不认为将 OrderedMap 转换为 JS 然后连接结果是将新 JS 对象合并到 OrderedMap 的最佳性能方式。而且,我确信这是一个常见问题,但我找不到这个问题的答案。
最佳答案
我会这样做(merge
可以采用键值对数组):
const keyValuePairsArray = newItemsArray.map(item => [getKey(item), item]);
const myNewMap = myExistingMap.merge(keyValuePairsArray);
<小时/>
另一种选择是创建一个对象而不是键值对数组,但我认为它更难看:
const newItemsPojo = newItemsArray.reduce((obj, item) => {
obj[getKey(item)] = item;
return obj;
}, {});
const myNewMap = myExistingMap.merge(newItemsPojo);
<小时/>
高性能选项是使用 withMutations
(这就是 merge
在幕后所做的),但我认为它是最不可读的代码,它实际上并没有快多少,并且关于如何使用 withMutations
有特殊规则:
const myNewMap = myExistingMap.withMutations(existing => {
const newMap = existing;
newItemsArray.forEach(item => {
newMap.set(getKey(item), item);
});
return newMap;
});
关于javascript - 如何将 JS 对象数组与现有的不可变 JS 有序映射结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57381493/