猿问

javascript按键名合并两个对象

假设我有以下两个对象:


var a = {

  "abc": {

    "111": {

       name: "jon"

    }

  },

  "xyz": {

    "222": {

       name: "bill"

    }

  }

}


var b = {

  "xyz": {

    "333": {

       name: "mary"

    }

  }

}

然后我想创建一个新对象以通过顶级键名合并两者。所以要得到这样的东西:


var c = {

  "abc": {

    "111": {

       name: "jon"

    }

  },

  "xyz": {

    "222": {

       name: "bill"

    },

    "333": {

       name: "mary"

    }

  }

}

我想这可能是你用.map(), .each(), 或.reduce()? 在这种情况下,jQuery 会有所帮助吗?如果是这样怎么办?


青春有我
浏览 151回答 3
3回答

慕容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 = {&nbsp; "abc": {&nbsp; &nbsp; "111": {&nbsp; &nbsp; &nbsp; &nbsp;name: "jon"&nbsp; &nbsp; }&nbsp; },&nbsp; "xyz": {&nbsp; &nbsp; "222": {&nbsp; &nbsp; &nbsp; &nbsp;name: "bill"&nbsp; &nbsp; }&nbsp; }}var b = {&nbsp; "xyz": {&nbsp; &nbsp; "333": {&nbsp; &nbsp; &nbsp; &nbsp;name: "mary"&nbsp; &nbsp; }&nbsp; }}&nbsp; &nbsp;const c = {abc: a.abc, xyz: [a.xyz, b.xyz]};&nbsp; &nbsp; console.log(c);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答