如何通过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
相关产品推荐
相关产品推荐

