我有以下示例代码。
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"
}
}
所以我有两个对象。我想基本上将它们组合起来,并且能够为其中一个对象分配优先于另一个对象的功能。
两个对象都来自外部资源,因此不能保证结构和数据,因此我必须考虑数据处于不同结构中的情况。
由于散布运算符仅适用于对象的根级,我如何轻松地做到这一点?
我正在寻找最干净,最简单的解决方案。
答案 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
}
};
如果需要执行更深的合并,则必须实施自己的合并。