JavaScript串联嵌套对象传播运算符

时间:2018-09-11 20:19:32

标签: javascript

我有以下示例代码。

var myObj1 = {
    name: {
        first: "First",
        last: "Last"
    }
};

var myObj2 = {
    name: {
        first: "Other",
        middle: "Middle"
    }
};

var myMainObj = {
    ...myObj1,
    ...myObj2
};

console.log(myMainObj);

我希望myMainObj是以下内容:

{
    name: {
        first: "Other",
        middle: "Middle",
        last: "Last"
    }
}

但是myMainObj最终是:

{
    name: {
        first: "Other",
        middle: "Middle"
    }
}

所以我有两个对象。我想基本上将它们组合起来,并且能够为其中一个对象分配优先于另一个对象的功能。

两个对象都来自外部资源,因此不能保证结构和数据,因此我必须考虑数据处于不同结构中的情况。

由于散布运算符仅适用于对象的根级,我如何轻松地做到这一点?

我正在寻找最干净,最简单的解决方案。

2 个答案:

答案 0 :(得分:3)

您可以使用lodash lib中的.merge方法。 lodash维护人员已经完成了这些工作,无需重新发明轮子,只需使用他们的lib。

  

此方法类似于_.assign,但它递归合并自己和   源对象继承的可枚举的字符串键控属性   目标对象。

var myObj1 = {
    name: {
        first: "First",
        last: "Last"
    }
};

var myObj2 = {
    name: {
        first: "Other",
        middle: "Middle"
    }
};

var myMainObj = _.merge({}, myObj1, myObj2)

console.log(myMainObj);
<script src="https://cdn.jsdelivr.net/lodash/4/lodash.min.js"></script>

答案 1 :(得分:2)

这应该做:

var myMainObj = {
    name: {
        ...myObj1.name,
        ...myObj2.name
    }
};

如果需要执行更深的合并,则必须实施自己的合并。