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

如何根据对象中的id对JSON对象进行分组并添加计数字段

根据ID分组JSON对象并添加计数字段

这是开发里很常见的需求,用JavaScript的Array.reduce()方法就能轻松搞定,我给你一步步拆解实现方式:

实现思路

  • 用一个临时对象做累加器,以每个条目的id作为键,用来存分组后的结果
  • 遍历原始数组时,遇到相同id的条目就给对应条目的qty计数加1
  • 碰到新的id就初始化一个新条目,同时给它加上qty: 1的初始计数
  • 最后把累加器里的取值转换成数组,就是我们要的最终输出

完整代码示例

var a = [
 {"name":"test","id":101,"price":100},
 {"name":"test","id":101,"price":100},
 {"name":"test3","id":103,"price":10},
 {"name":"test2","id":102,"price":12},
];

// 用reduce完成分组和计数逻辑
const groupedResult = a.reduce((accumulator, currentItem) => {
  // 检查当前id是否已经在累加器中存在
  if (accumulator[currentItem.id]) {
    // 存在则计数加1
    accumulator[currentItem.id].qty++;
  } else {
    // 不存在则创建新条目,复制当前item并添加qty初始值
    accumulator[currentItem.id] = {...currentItem, qty: 1};
  }
  return accumulator;
}, {});

// 将累加器的对象值转为数组,得到最终结果
const output = Object.values(groupedResult);
console.log(output);

运行结果

[
 {"name":"test","id":101,"price":100,"qty":2},
 {"name":"test3","id":103,"price":10,"qty":1},
 {"name":"test2","id":102,"price":12,"qty":1},
]

补充说明

这里用扩展运算符{...currentItem}做了浅拷贝,能保证原始数组的条目不会被修改。如果你的JSON对象里有嵌套的复杂结构,可能需要用深拷贝(比如JSON.parse(JSON.stringify(currentItem)))来避免引用问题,但对于示例里的简单结构,浅拷贝完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:32:37