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

JavaScript中按属性分组聚合对象数组并保留结构的实现

按指定属性分组并求和聚合的实现方案

可以用JavaScript原生的reduce方法实现类似Python中groupby+agg的效果,无需依赖第三方库,且能兼容单条数据对应分组的场景,具体实现如下:

实现代码

const teams = [{posteam: 'ARI', week: 1, touchdowns: 2, fieldgoals: 3}, {posteam: 'ARI', week: 2, touchdowns: 4, fieldgoals: 1}, {posteam: 'ARI', week: 3, touchdowns: 1, fieldgoals: 4},{posteam: 'ATL', week: 1, touchdowns: 0, fieldgoals: 2}];

const aggregated = Object.values(teams.reduce((acc, curr) => {
  // 以posteam作为分组键
  const key = curr.posteam;
  if (!acc[key]) {
    // 初始化分组对象,只保留需要的属性
    acc[key] = {
      posteam: key,
      touchdowns: 0,
      fieldgoals: 0
    };
  }
  // 累加数值属性
  acc[key].touchdowns += curr.touchdowns;
  acc[key].fieldgoals += curr.fieldgoals;
  return acc;
}, {}));

console.log(aggregated);

代码说明

  1. reduce遍历处理:通过reduce构建一个临时对象,键为posteam的值,值为对应分组的聚合对象。
  2. 初始化分组:如果当前分组不存在,就创建一个包含posteam、初始化为0的touchdowns和fieldgoals的对象。
  3. 数值累加:对每个分组的数值属性进行累加操作。
  4. 转换为目标数组:用Object.values()将临时对象的取值转换为数组,得到最终的聚合结果。

兼容性说明

当某个posteam只有单条数据时,代码会正常初始化分组并累加该条数据的数值,最终输出包含该分组的单个对象,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:55:20