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

如何通过for循环实现按AgeBin和Release分组统计DefectsCount(禁用Lodash)

用原生JavaScript的for循环实现多字段分组统计DefectsCount总和

没问题,我来教你怎么用纯原生JavaScript的for循环搞定这个分组统计需求,完全不用依赖Lodash。咱们一步步来:

实现思路

核心是用一个临时对象来记录每个分组的统计结果,通过AgeBin和Release的组合作为唯一键来区分不同分组,最后把对象的取值转换成目标数组即可。

完整代码实现

// 原始输入数据集
const inputData = [
  {"DefectsCount":1,"Release":"5.7.1.0","SWID":"23","AgeBin":"0-20","BinStart":0,"ReleaseSWID":"5.6.1.1.23"},
  {"DefectsCount":1,"Release":"5.7.1.0","SWID":"172","AgeBin":"0-20","BinStart":0,"ReleaseSWID":"5.7.1.0.172"},
  {"DefectsCount":1,"Release":"5.6.1.2","SWID":null,"AgeBin":"0-21","BinStart":0}
];

// 临时对象,用于存储分组统计结果
const groupStats = {};

// 用for循环遍历每一条数据
for (let i = 0; i < inputData.length; i++) {
  const item = inputData[i];
  // 构建唯一分组键:把AgeBin和Release组合成字符串,确保每个分组唯一
  const groupKey = `${item.AgeBin}-${item.Release}`;
  
  if (!groupStats[groupKey]) {
    // 如果分组不存在,初始化该分组的统计数据
    groupStats[groupKey] = {
      DefectsCount: item.DefectsCount,
      AgeBin: item.AgeBin,
      Release: item.Release
    };
  } else {
    // 如果分组已存在,累加DefectsCount
    groupStats[groupKey].DefectsCount += item.DefectsCount;
  }
}

// 把临时对象的取值转换成目标数组格式
const result = Object.values(groupStats);

console.log(result);
// 输出结果:
// [{"DefectsCount":2,"AgeBin":"0-20","Release":"5.7.1.0"},{"DefectsCount":1,"AgeBin":"0-21","Release":"5.6.1.2"}]

代码解释

  • 临时对象groupStats:用来缓存每个分组的统计信息,键是AgeBin+Release的组合字符串,保证每个分组唯一。
  • for循环遍历:逐个处理输入数组里的每一条数据,判断当前数据属于哪个分组。
  • 分组初始化/累加:如果是新分组就创建条目,已有分组就累加缺陷数。
  • 转换为数组:用Object.values()把对象的所有值提取出来,转换成需求的数组格式。

这样就完全用原生for循环实现了你要的分组统计功能,而且逻辑清晰,没有依赖第三方库~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:42:30