如何高效统计JavaScript数组中班次与部门的关联数量
高效统计班次与部门组合数量的JavaScript方案
嘿,作为JavaScript新手真的不用把这个问题想复杂!我给你准备了一个简单易懂的方案,既能统计每个班次的总人数,也能统计「班次+部门」组合的人数,完全贴合你想要的输出格式~
核心思路
我们可以用一个对象来存储所有统计结果,遍历你的数据数组时,分别更新单独班次和班次+部门组合的计数,最后把统计对象转换成你需要的字符串格式就行。
代码实现
// 你的原始数据数组 const data = [ {"shift":2,"department":"Pallet-Pack"}, {"shift":1,"department":"Carton-Pack"}, {"shift":2,"department":"Carton-Pack"}, {"shift":1,"department":"Picking"}, {"shift":1,"department":"Carton-Pack"}, {"shift":1,"department":"Carton-Pack"}, {"shift":2,"department":"Picking"}, {"shift":3,"department":"Inventory"}, {"shift":1,"department":"Carton-Pack"}, {"shift":1,"department":"Receiving"}, {"shift":3,"department":"Equipment"}, {"shift":2,"department":"Receiving"}, {"shift":1,"department":"Picking"}, {"shift":1,"department":"Picking"}, {"shift":2,"department":"Carton-Pack"}, {"shift":2,"department":"Carton-Pack"}, {"shift":1,"department":"Receiving"}, {"shift":1,"department":"Returns"}, {"shift":1,"department":"Receiving"}, {"shift":1,"department":"Picking"}, {"shift":2,"department":"Receiving"}, {"shift":1,"department":"Pallet-Pack"}, {"shift":2,"department":"Picking"}, {"shift":1,"department":"Carton-Pack"} ]; // 用reduce方法统计数据 const stats = data.reduce((acc, item) => { // 统计单独班次的数量 const shiftKey = `shift ${item.shift}`; acc[shiftKey] = (acc[shiftKey] || 0) + 1; // 统计班次+部门组合的数量 const comboKey = `shift ${item.shift} & ${item.department}`; acc[comboKey] = (acc[comboKey] || 0) + 1; return acc; }, {}); // 转换成你想要的字符串格式 const result = Object.entries(stats).map(([key, value]) => `${key}: ${value}`).join(' '); console.log(result);
代码解释
reduce方法:这是JavaScript里专门做累加/聚合操作的工具,比手动写for循环更简洁,逻辑也更清晰。我们用它遍历整个数据数组,逐步构建统计对象。- 统计键的生成:
- 单独班次的键是
shift X(比如shift 1) - 组合键是
shift X & 部门名称(比如shift 1 & Carton-Pack)
- 单独班次的键是
- 计数更新:
acc[key] = (acc[key] || 0) + 1这句话的意思是,如果统计对象里还没有这个键,就从0开始加1;如果已经有了,就在原来的数字上加1。 - 格式转换:最后用
Object.entries把统计对象转成键值对数组,再用map把每一组转成key: value的字符串,最后用空格连接起来,就得到了你想要的输出格式。
运行结果
运行这段代码后,你会得到类似这样的输出:
shift 2: 9 shift 2 & Pallet-Pack: 1 shift 1: 13 shift 1 & Carton-Pack: 6 shift 1 & Picking: 4 shift 1 & Receiving: 3 shift 1 & Returns: 1 shift 1 & Pallet-Pack: 1 shift 2 & Carton-Pack: 3 shift 2 & Picking: 2 shift 2 & Receiving: 2 shift 3: 2 shift 3 & Inventory: 1 shift 3 & Equipment: 1
完全符合你想要的统计需求,而且代码简单易读,新手也能轻松理解~
内容的提问来源于stack exchange,提问作者Gabriel Motta
相关产品推荐
相关产品推荐

