在我的应用程序中,我异步获取结果并将其作为Immutable JS有序映射存储在Redux存储中。当我从ajax调用接收到新的JS对象数组时,我想附加到此有序映射。以某种方式,我不认为将OrderedMap转换为JS,然后将结果串联是将新JS对象合并到OrderedMap中的最佳性能方法。而且,我敢肯定这是一个普遍的问题,但是我找不到这个问题的答案。
答案 0 :(得分:0)
我会这样做(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;
});