【问题标题】:javascript: left-merge two objects using EcmaScript 6 / immutable jsjavascript: 使用 EcmaScript 6 / immutable js 左合并两个对象
【发布时间】:2017-11-15 13:24:43
【问题描述】:

我在 javascript 项目中工作。

我现在正在搜索合并两个对象的选项,因为第二个对象只会覆盖第一个对象的字段,而不会添加第二个对象没有的新字段。

类似:

const firstObj = {name:'jon', age:'6}
const secondObj = {name:'nir', mark:'100%'}

const mergedObj = leftMerge(firstObj, secondObj);

所以我喜欢mergedObj:

{name:'nir', age:'6'}

我有什么方法可以使用 javascript(我使用 EcmaScript 6)或 immutable.js 库来做到这一点?

【问题讨论】:

    标签: javascript object merge ecmascript-6 immutable.js


    【解决方案1】:

    没有内置的(Object.assign 合并 所有 属性),但您可以自己轻松编写:

    function leftMerge(a, b) {
        const res = {};
        for (const p in a)
            res[p] = (p in b ? b : a)[p];
        return res;
    }
    

    【讨论】:

      【解决方案2】:

      迭代firstObj键,如果有这些属性,则从secondObj获取值,如果没有,则从firstObj获取值:

      const firstObj = {name:'jon', age:'6'}
      const secondObj = {name:'nir', mark:'100%'}
      
      const leftMerge = (a, b) => Object.keys(a).reduce((r, key) => (r[key] = (key in b ? b : a)[key], r), {});
      
      const mergedObj = leftMerge(firstObj, secondObj);
      
      console.log(mergedObj);

      【讨论】:

      • 我建议放弃 Object.assign 并使其 (horrible) if 成为 if-else 声明
      • @Bergi - 感谢您提供更好的逻辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      相关资源
      最近更新 更多