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"
}
}

所以我有两个对象。我想基本上将它们组合在一起,并能够为其中一个对象分配优先级而不是另一个对象。

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

由于 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
}
};

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

最新更新