JavaScript如何使用reduce()按多列/多条件对二维数组分组求和
多列分组求和实现方案
问题背景
原有代码仅支持按二维数组索引为1的第二列做单维度分组,对首列数值求和,需要新增最后一列作为第二个分组条件,实现双维度分组求和,输出匹配指定结果。
原有代码局限
原逻辑分组键仅取v[1](第二列值),无法区分第二列相同但最后一列值不同的分组,会把不同分组的数据错误累加。
修改后实现代码
let array = [[3, 'name', 'old'],[4, 'lastname','young'],[2, 'name', 'old'],[4, 'lastname','old']]; let result = Object.values(array.reduce((c, v) => { // 拼接第二列、最后一列生成唯一分组键,双条件同时匹配才归为同一组 const groupKey = `${v[1]}_${v.at(-1)}`; if (c[groupKey]) { c[groupKey][0] += v[0]; } else { // 拷贝当前行数据,避免修改原始数组的引用值 c[groupKey] = [...v]; } return c; }, {})); console.log(result);
运行结果
执行代码后输出完全符合预期:
[ [5, 'name', 'old'], [4, 'lastname', 'young'], [4, 'lastname', 'old'] ]
关键修改点说明
- 分组键从单字段替换为第二列+最后一列拼接的唯一字符串,保证两个分组条件同时相等时才判定为同组数据
- 新增数组浅拷贝逻辑,避免累加操作污染原始输入数组
- 取最后一列使用
v.at(-1)语法,无需手动计算数组长度,适配任意列数的二维数组场景,始终取每行最后一位作为分组条件
内容的提问来源于stack exchange,提问作者onit
相关产品推荐
相关产品推荐

