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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:51:30