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

如何用JavaScript从指定对象数组生成分组统计后的新数组?

按num属性分组并统计count和totalSum的解决方案

没问题,这是个很常见的数组分组统计需求,我给你提供两种实用的JavaScript实现方式:

方法一:使用Array.reduce()(推荐,简洁高效)

这是处理这类场景最常用的方案,用reduce一步完成分组和统计,再转换成你需要的数组格式:

// 你的输入数组
const inputArr = [ 
  {num: 1, sum: 10}, 
  {num: 1, sum: 2}, 
  {num: 1, sum: 3}, 
  {num: 2, sum: 1}, 
  {num: 2, sum: 40}, 
  {num: 2, sum: 100}, 
  {num: 3, sum: 0}, 
  {num: 4, sum: 0}, 
];

// 第一步:用reduce完成分组统计
const groupedStats = inputArr.reduce((accumulator, currentItem) => {
  // 如果当前num还没被记录,初始化统计对象
  if (!accumulator[currentItem.num]) {
    accumulator[currentItem.num] = { count: 0, totalSum: 0 };
  }
  // 更新计数和总和
  accumulator[currentItem.num].count++;
  accumulator[currentItem.num].totalSum += currentItem.sum;
  return accumulator;
}, {}); // 初始值是空对象,用来存储分组数据

// 第二步:转换成你需要的数组格式
const finalResult = Object.entries(groupedStats).map(([num, stats]) => {
  // 用Number(num)把键转成数字类型,否则默认是字符串
  return { [Number(num)]: stats };
});

console.log(finalResult);

运行后会得到符合预期的结果:

[
  { 1: { count: 3, totalSum: 15 } },
  { 2: { count: 3, totalSum: 141 } },
  { 3: { count: 1, totalSum: 0 } },
  { 4: { count: 1, totalSum: 0 } }
]

方法二:使用for...of循环(更直观,适合新手)

如果你对reduce不太熟悉,用普通循环也能实现,逻辑更直白:

const inputArr = [ 
  {num: 1, sum: 10}, 
  {num: 1, sum: 2}, 
  {num: 1, sum: 3}, 
  {num: 2, sum: 1}, 
  {num: 2, sum: 40}, 
  {num: 2, sum: 100}, 
  {num: 3, sum: 0}, 
  {num: 4, sum: 0}, 
];

const groupedStats = {};

// 遍历数组,逐个统计
for (const item of inputArr) {
  const num = item.num;
  if (!groupedStats[num]) {
    groupedStats[num] = { count: 0, totalSum: 0 };
  }
  groupedStats[num].count++;
  groupedStats[num].totalSum += item.sum;
}

// 转换成目标数组格式
const finalResult = Object.entries(groupedStats).map(([num, stats]) => ({
  [Number(num)]: stats
}));

console.log(finalResult);

补充说明

  • 如果你不需要把键转成数字类型,直接用[num]即可,结果里的键会是字符串类型(比如'1'),这在JavaScript里不影响使用。
  • 两种方法的核心逻辑都是先按num分组存储统计数据,再把分组对象转换成你需要的数组结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:22:49