You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将对象数组转换为含唯一id及同id name集合的新对象数组

JavaScript 数组按id分组合并实现

需求说明

将包含重复id的对象数组按id字段分组,最终输出id唯一的数组,每个数组项包含names属性,值为所有同id对象的name属性组成的集合。

示例输入

const items = [
  {id: 1, name: 'a'}, 
  {id: 2, name: 'b'}, 
  {id: 3, name: 'c'}, 
  {id: 1, name: 'd'}, 
  {id: 3, name: 'f'}
];

预期输出

const result = [
  {id: 1, names: ['a', 'd']}, 
  {id: 2, names: ['b']}, 
  {id: 3, names: ['c', 'f']}
];

推荐实现方案

使用Array.reduce结合Object.values实现,时间复杂度为O(n),仅需遍历一次原数组,性能最优:

const result = Object.values(items.reduce((accumulator, currentItem) => {
  // 不存在对应id的分组时先初始化
  if (!accumulator[currentItem.id]) {
    accumulator[currentItem.id] = { id: currentItem.id, names: [] };
  }
  // 归集当前项的name到对应分组
  accumulator[currentItem.id].names.push(currentItem.name);
  return accumulator;
}, {}));

该实现会保留id在原数组中首次出现的先后顺序,兼容所有现代浏览器及Node.js环境

内容的提问来源于stack exchange,提问作者jslearner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:36:03