我有以下示例代码。
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"
}
}
所以我有两个对象。我想基本上将它们组合在一起,并能够为其中一个对象分配优先级而不是另一个对象。
这两个对象都来自外部来源,因此无法保证结构和数据,我必须考虑数据处于不同的结构中。
由于 spread 运算符仅适用于对象的根级别,我如何轻松执行此操作?
我正在寻找最干净,最简单的解决方案来做到这一点。
您可以使用 lodash lib 中的.merge
方法来实现此目的。lodash 维护者已经完成的工作,无需重新发明轮子,只需使用他们的库即可。
此方法类似于
_.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>
这应该可以:
var myMainObj = {
name: {
...myObj1.name,
...myObj2.name
}
};
如果需要执行更深层次的合并,则必须实现自己的合并。