3 回答
TA贡献1773条经验 获得超3个赞
您可以简单地使用Object.entries()和Array.reduce(),
主要思想是遍历两个数组并维护一个映射。
迭代第一个对象并创建其所有属性的映射。
然后迭代第二个对象,并检查它的每个属性是否存在于地图中,如果存在则合并两者,如果不存在则简单地添加它。
var a = { "abc": { "111": { name: "jon" } }, "xyz": { "222": { name: "bill" } } }
var b = { "xyz": { "333": { name: "mary" } } };
let result = Object.entries(a).reduce((acc,[key, value]) => (acc[key] = value,acc),{});
Object.entries(b).reduce((acc,[key, value]) => (acc[key] =acc[key] && Object.assign(acc[key], value)|| value,acc),result);
console.log(result);
如果您可以使用现有对象之一,那么简单的解决方案可以是:
var a = { "abc": { "111": { name: "jon" } }, "xyz": { "222": { name: "bill" } } }
var b = { "xyz": { "333": { name: "mary" } } };
Object.entries(a).forEach(([key, value])=>{
b[key] = Object.assign(b[key] || {}, value);
});
console.log(b);
TA贡献1831条经验 获得超9个赞
如果您已经在项目中使用 jQuery 或 Lodash,则可以分别使用$.extend或_.merge。当您已经在使用这些库之一时,无需重新发明轮子。
var a = { "abc": { "111": { name: "jon" } }, "xyz": { "222": { name: "bill" } } };
var b = { "xyz": { "333": { name: "mary" } } };
console.log($.extend(true, {}, a, b));
console.log(_.merge({}, a, b));
console.log("a =", a);
console.log("b =", b);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
TA贡献1836条经验 获得超5个赞
你能使用es6对象解构吗?
var a = {
"abc": {
"111": {
name: "jon"
}
},
"xyz": {
"222": {
name: "bill"
}
}
}
var b = {
"xyz": {
"333": {
name: "mary"
}
}
}
const c = {abc: a.abc, xyz: [a.xyz, b.xyz]};
console.log(c);
添加回答
举报