js数组对象根据某两个字段合并对象

发布于 2022-09-13 01:01:52 字数 629 浏览 20 评论 0

有如下数组对象:

 let arr = [
      { id: 1,name:'小明', list: { id: 66 } },
      { id: 1,name:'小红', list: { id: 44 } },
      { id: 2,name:'小绿', list: { id: 55 } },
      { id: 2,name:'小绿', list: { id: 33 } },
      { id: 3,name:'小紫', list: { id: 11 } },
      { id: 3,name:'小紫', list: { id: 22 } }
    ]

现需要把id和name相同的对象进行合并
结果如下:

let arr = [
      { id: 1,name:'小明', list: { id: 66 } },
      { id: 1,name:'小红', list: { id: 44 } },
      { id: 2,name:'小绿', list: [{ id: 55 },{ id: 33 }] },
      { id: 3,name:'小紫', list: [{ id: 22 },{ id: 11 }] }
    ]

各位大神帮忙看下,感谢!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

恰似旧人归 2022-09-20 01:01:52

更新:原先不符合结果

let arr = [
      { id: 1,name:'小明', list: { id: 66 } },
      { id: 1,name:'小红', list: { id: 44 } },
      { id: 2,name:'小绿', list: { id: 55 } },
      { id: 2,name:'小绿', list: { id: 33 } },
      { id: 3,name:'小紫', list: { id: 11 } },
{ id: 3,name:'小紫', list: { id: 11 } },
      { id: 3,name:'小紫', list: { id: 22 } }
    ];

console.log(JSON.stringify(Object.values(arr.reduce((acc,{id,name,list})=>(acc[name] ? (acc[name].list = (Array.isArray(acc[name].list) ? acc[name].list : [acc[name].list]).concat({id:list.id})) : (acc[name]={id,name,list}) ,acc),{}))))

结果

[
  {
    "id": 1,
    "name": "小明",
    "list": {"id": 66}
  },
  {
    "id": 1,
    "name": "小红",
    "list": {"id": 44}
  },
  {
    "id": 2,
    "name": "小绿",
    "list": [{"id": 55}, {"id": 33}]
  },
  {
    "id": 3,
    "name": "小紫",
    "list": [{"id": 11}, {"id": 11}, {"id": 22}]
  }
]

原先回答

let arr = [
      { id: 1,name:'小明', list: { id: 66 } },
      { id: 1,name:'小红', list: { id: 44 } },
      { id: 2,name:'小绿', list: { id: 55 } },
      { id: 2,name:'小绿', list: { id: 33 } },
      { id: 3,name:'小紫', list: { id: 11 } },
      { id: 3,name:'小紫', list: { id: 22 } }
    ];

console.log(JSON.stringify(Object.values(arr.reduce((acc,{id,name,list})=>((acc[name]||={id,name,list:[]}).list.push({id:list.id}),acc),{}))))

结果

[
  {
    "id": 1,
    "name": "小明",
    "list": [{"id": 66}]
  },
  {
    "id": 1,
    "name": "小红",
    "list": [{"id": 44}]
  },
  {
    "id": 2,
    "name": "小绿",
    "list": [{"id": 55}, {"id": 33}]
  },
  {
    "id": 3,
    "name": "小紫",
    "list": [{"id": 11}, {"id": 22}]
  }
]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文