-
慕容3067478
您可以简单地使用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);
-
天涯尽头无女友
如果您已经在项目中使用 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>
-
一只甜甜圈
你能使用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);