js 遍历list,把拥有相同id的对象合并,剩余的参数值组成一个数组

描述:

例如,我有下面这样的一个数组,要把同id的对象合并,然后把相同id的对象里的name值组成一个数组。

const data = [
  { id: 1, name: 'John' },
  { id: 1, name: 'Amy' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Adam' },
  { id: 3, name: 'Sam' }
];

解决方案:

先定义一个新的list,循环遍历旧数组的每一个对象,以第一项为例,判断如果旧数组中是否已经存在该项同一个id的对象,如果存在,则将该对象的 name 添加到 names 数组中;如果不存在,则添加该 id 对应的新对象。遍历完旧数组后,我们就能得到一个合并好的新数组。

const data = [
  { id: 1, name: 'John' },
  { id: 1, name: 'Amy' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Adam' },
  { id: 3, name: 'Sam' }
];

const result = [];

data.forEach((item) => {
  // 查找结果数组中是否已经存在该 id 的对象
  const index = result.findIndex((r) => r.id === item.id);
  // 如果不存在,则添加该 id 对应的新对象
  if (index === -1) {
    result.push({ id: item.id, names: [item.name] });
  } 
  // 如果已经存在,则将该对象的 name 添加到 names 数组中
  else {
    result[index].names.push(item.name);
  }
});
console.log(result);

输出结果:

[
  { id: 1, names: [ 'John', 'Amy' ] },
  { id: 2, names: [ 'Bob' ] },
  { id: 3, names: [ 'Adam', 'Sam' ] }
]
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值