如何用JavaScript按type和program分组统计reference数量?
问题描述
我有一个由三个数组组成的
result变量,代码如下:var result = { type: [a,a,b,c,d,a,a,b], program : [P1, P1, P2, P1, P2, P2, P2, P1], reference : [ref1,ref2,ref3,...,ref8] }希望按
type和program对reference进行分组,得到如下格式的数据集:programme type count P1 a 2 P1 b 1 P1 d 1 P2 a 2 P2 b 1 P2 d 1
实现方案
这里提供JavaScript的实现思路,核心是通过遍历数组、组合分组键完成统计:
- 用临时对象存储分组统计结果,以
program和type的组合作为唯一键避免重复分组 - 统计每个组合的出现次数,可按需跳过不需要的类型(比如示例中的
c) - 最后将统计结果转换为目标格式的数组或文本
具体代码如下:
// 假设a、b、c、d、P1、P2为字符串类型,若为变量需提前定义 const result = { type: ['a','a','b','c','d','a','a','b'], program : ['P1', 'P1', 'P2', 'P1', 'P2', 'P2', 'P2', 'P1'], reference : ['ref1','ref2','ref3','ref4','ref5','ref6','ref7','ref8'] }; // 初始化统计对象 const stats = {}; // 遍历数组进行分组统计 for (let i = 0; i < result.type.length; i++) { const currentType = result.type[i]; const currentProgram = result.program[i]; // 跳过不需要统计的类型(比如示例中的c,不需要可删除此行) if (currentType === 'c') continue; // 生成唯一分组键 const groupKey = `${currentProgram}_${currentType}`; // 更新统计计数 if (stats[groupKey]) { stats[groupKey].count++; } else { stats[groupKey] = { programme: currentProgram, type: currentType, count: 1 }; } } // 转换为数组格式的结果 const groupedResult = Object.values(stats); // 转换为指定的文本输出格式 let outputText = 'programme type count\n'; groupedResult.forEach(item => { outputText += `${item.programme} ${item.type} ${item.count}\n`; }); // 打印结果 console.log(outputText);
运行后会输出符合要求的文本格式,也可以直接使用groupedResult数组进行后续处理。
内容的提问来源于stack exchange,提问作者Nabs335
相关产品推荐
相关产品推荐

