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

在Node环境中使用JavaScript按相同键值合并数组

按name键分组数组元素的解决方案

没问题,这个需求在Node.js里用数组的reduce方法就能优雅解决,我给你写个实用的实现:

const myObjOne = [
  { "name":"John", "id":1, "car":"maruti" },
  { "name":"John", "id":2, "car":"wolks" },
  { "name":"John", "id":3, "car":"bmw" },
  { "name":"Peter", "id":4, "car":"alto" },
  { "name":"Peter", "id":5, "car":"swift" }
];

// 使用reduce进行分组
const grouped = myObjOne.reduce((accumulator, currentItem) => {
  // 解构出name和剩余属性(id、car)
  const { name, ...restProps } = currentItem;
  
  // 如果累加器中还没有当前name的分组,就初始化一个
  if (!accumulator[name]) {
    accumulator[name] = { name, items: [] };
  }
  
  // 将当前元素的剩余属性添加到对应分组的items数组中
  accumulator[name].items.push(restProps);
  
  return accumulator;
}, {});

// 将分组后的对象转换为目标数组格式
const myObj = Object.values(grouped);

console.log(myObj);

代码逻辑说明:

  • reduce方法遍历原始数组,用accumulator(累加器)临时存储按name分组的数据,初始值是一个空对象
  • 每次遍历解构出当前元素的name和其他属性,避免手动提取id和car,扩展性更好(如果以后加其他属性也不用改代码)
  • 检查累加器中是否已有当前name的分组,没有就创建包含name和空items数组的对象
  • 将当前元素的剩余属性推入对应分组的items数组
  • 最后用Object.values()把累加器对象的所有值提取出来,转成你需要的数组格式

运行这段代码后,输出结果和你期望的myObj完全一致,而且这个方案在所有支持ES6+的Node.js版本(目前主流LTS版本都支持)都能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:48:39