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

如何在JavaScript中对数组分组并统计重复组合?

解决JavaScript数组分组统计问题

问题分析

你之前的代码问题在于,把数组元素(如['Jack', 'A'])直接作为对象的键,JavaScript会自动将其转换为字符串(比如"Jack,A"),虽然能统计每个组合的次数,但得到的是扁平的统计结果,没办法按姓名分组展示每个等级的数量。

解决方案

我们可以用嵌套对象来实现分层统计:外层对象以姓名为键,内层对象以等级为键存储对应数量。

实现代码1(forEach版本)

var array = [
['Jack', 'A'], 
['Jack', 'A'], 
['Sara', 'A'], 
['Jack', 'B'], 
['Peter', 'B'],
['Sara', 'C'], 
['Sara', 'B'],
['Sara', 'A'],
['Sara', 'B'], 
['Peter', 'B'],
['Peter', 'A'],
['Peter', 'C']
];

const counts = {};

array.forEach(([name, grade]) => {
    // 若当前姓名未在统计对象中,初始化空对象
    if (!counts[name]) {
        counts[name] = {};
    }
    // 累加对应等级的数量
    counts[name][grade] = (counts[name][grade] || 0) + 1;
});

// 遍历统计结果,输出目标格式
for (const name in counts) {
    for (const grade in counts[name]) {
        console.log(`${name}: ${grade} : ${counts[name][grade]}`);
    }
}

实现代码2(reduce版本,更简洁)

var array = [
['Jack', 'A'], 
['Jack', 'A'], 
['Sara', 'A'], 
['Jack', 'B'], 
['Peter', 'B'],
['Sara', 'C'], 
['Sara', 'B'],
['Sara', 'A'],
['Sara', 'B'], 
['Peter', 'B'],
['Peter', 'A'],
['Peter', 'C']
];

const counts = array.reduce((acc, [name, grade]) => {
    // 初始化姓名对应的对象(不存在则创建)
    acc[name] = acc[name] || {};
    // 累加等级数量
    acc[name][grade] = (acc[name][grade] || 0) + 1;
    return acc;
}, {});

// 输出目标格式
for (const name in counts) {
    for (const grade in counts[name]) {
        console.log(`${name}: ${grade} : ${counts[name][grade]}`);
    }
}

输出结果

运行上述代码后,控制台会输出你需要的格式:

Jack: A : 2
Jack: B : 1
Sara: A : 2
Sara: B : 2
Sara: C : 1
Peter: A : 1
Peter: B : 2
Peter: C : 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:43:10