javascript - 如何将 JS 对象数组与现有的不可变 JS 有序映射结合起来?

标签 javascript reactjs react-redux immutable.js

在我的应用程序中,我异步获取结果并将它们作为 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/

相关文章:

javascript - 我看到了 Node 模式,但不明白为什么?

javascript - 一键提交多表单

javascript - 如何从 Microsoft graph API 访问用户的个人资料照片并显示 React 应用程序?

javascript - 如何在对象状态 react 中删除对象数组

javascript - react JS : Refactoring Redux Selectors

javascript - react native : Error while downgrading from 0. 51 到 0.45

javascript - 如何避免在刷新时重置本地存储中的 JSON 对象?

javascript - 排序数组,但忽略开头的一些特定字符

javascript - react-router-dom 不工作只是渲染 "/"

react-native - 使用 Redux 在 React Native 中获取 AsyncStorage 中的随机对象