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

有如下数组对象:

 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 }] }
    ]

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

阅读 4.1k
1 个回答

更新:原先不符合结果

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}]
  }
]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题