为了账号安全,请及时绑定邮箱和手机立即绑定

javascript按键名合并两个对象

javascript按键名合并两个对象

青春有我 2021-11-04 15:39:41
假设我有以下两个对象: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 会有所帮助吗?如果是这样怎么办?
查看完整描述

3 回答

?
慕容3067478

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);


查看完整回答
反对 回复 2021-11-04
?
天涯尽头无女友

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>



查看完整回答
反对 回复 2021-11-04
?
一只甜甜圈

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);


查看完整回答
反对 回复 2021-11-04
  • 3 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信