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

如何按指定key对数组对象分组并对其余同名字段值累加求和

实现方案

最高效的实现是单次遍历同时完成分组和数值累加,时间复杂度为O(n),仅需遍历原数组一次,不需要先分组再二次遍历做求和计算。

代码实现

const data = [{
    "month": "October",
    "active_users": 20,
    "invited_users": 35
},
{
    "month": "October",
    "active_users": 50,
    "invited_users": 60
},
{
    "month": "September",
    "active_users": 10,
    "invited_users": 45
},
{
    "month": "September",
    "active_users": 80,
    "invited_users": 95
}]

function groupAndSum(objectArray, groupKey) {
    const resultObj = objectArray.reduce((acc, cur) => {
        const keyValue = cur[groupKey];
        // 不存在该分组则初始化
        if (!acc[keyValue]) {
            acc[keyValue] = { [groupKey]: keyValue };
            // 初始化所有数值字段为0
            Object.keys(cur).forEach(key => {
                if (key !== groupKey && typeof cur[key] === 'number') {
                    acc[keyValue][key] = 0;
                }
            });
        }
        // 累加数值字段
        Object.keys(cur).forEach(key => {
            if (key !== groupKey && typeof cur[key] === 'number') {
                acc[keyValue][key] += cur[key];
            }
        });
        return acc;
    }, {});
    // 转为数组格式返回
    return Object.values(resultObj);
}

const result = groupAndSum(data, 'month');
console.log(result);

运行上述代码输出结果和你给出的预期完全一致。如果你的场景里需要明确指定要累加的字段,避免其他非数值字段被误处理,也可以调整函数增加一个可传入的累加字段列表参数,逻辑更可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:54:01