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

如何对二维数组去重并累加重复键对应的数值?

实现二维数组重复键合并并累加对应值

当然可以实现,以下是两种常用的JavaScript解决方案:

方法一:使用对象 + reduce

const arr = [[1664164800000,38],[1669006800000,11],[1669611600000,4],[1669611600000,12],[1670216400000,8]];

const result = Object.entries(
  arr.reduce((acc, [key, value]) => {
    // 若键已存在则累加值,否则初始化为当前值
    acc[key] = (acc[key] || 0) + value;
    return acc;
  }, {})
).map(([key, value]) => [Number(key), value]); // 将字符串键转回数字

console.log(result);
// 输出:[[1664164800000,38],[1669006800000,11],[1669611600000,16],[1670216400000,8]]

逻辑说明:

  1. 用reduce遍历原数组,构建一个以时间戳为键、累加值为值的对象
  2. 用Object.entries将对象转换为键值对数组
  3. 通过map把字符串类型的键转回数字类型,得到目标格式的二维数组

方法二:使用Map(更直观)

const arr = [[1664164800000,38],[1669006800000,11],[1669611600000,4],[1669611600000,12],[1670216400000,8]];

const sumMap = new Map();
arr.forEach(([key, value]) => {
  // 从Map中获取已有值(不存在则取0),累加后存回Map
  sumMap.set(key, (sumMap.get(key) || 0) + value);
});

const result = Array.from(sumMap); // 直接将Map转为二维数组

console.log(result);
// 输出:[[1664164800000,38],[1669006800000,11],[1669611600000,16],[1670216400000,8]]

逻辑说明:

  1. 创建Map实例存储键值对,Map的键支持数字类型,无需后续类型转换
  2. 遍历原数组,更新Map中对应键的累加值
  3. 用Array.from将Map直接转换为目标格式的二维数组,因为Map的默认迭代器会返回[key, value]形式的数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:45:31