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

如何更优处理对象数组,将同ID的name字段聚合为数组?

按ID分组合并对象数组中的名字字段

你当前用map只能提取出所有名字的一维数组,但要实现按ID分组、将对应名字合并为数组的需求,用Array.prototype.reduce()做聚合操作是更高效直接的方案,一步到位完成分组和数据重组。

实现代码

var items = [{
  id: 1,
  name: 'john'
}, {
  id: 1,
  name: 'jane'
}, {
  id: 1,
  name: 'zack'
}];

// 用reduce完成分组聚合
var result = Object.values(items.reduce((acc, item) => {
  const key = item.id;
  // 若当前ID未创建分组,初始化结构
  if (!acc[key]) {
    acc[key] = {
      id: String(item.id), // 转为字符串匹配期望输出格式
      names: []
    };
  }
  // 将当前name推入对应分组的names数组
  acc[key].names.push(item.name);
  return acc;
}, {}));

console.log(result);

代码说明

  • reduce以空对象为初始值,用来暂存以ID为键的分组数据
  • 遍历每个对象时,先检查当前ID是否已存在分组:
    • 不存在则创建包含目标结构的分组对象
    • 存在则直接追加name到对应数组
  • 最后用Object.values()把分组对象的取值转为数组,得到你要的输出格式

如果需要调整names数组的排序(比如和你示例输出的顺序一致),可以在结果生成后添加排序逻辑:

result.forEach(group => {
  group.names.sort();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:16:03