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

如何根据子数组前两个元素对第三个元素求和合并数组?

数组合并求和实现方案

需求明确:给定一个二维数组,每个子数组包含三个元素,需要将前两个元素完全相同的子数组合并,合并后的子数组前两个元素不变,第三个元素取所有符合条件的子数组第三个元素的和。

实现思路

  • 用临时对象做中间映射,将子数组前两个元素拼接成唯一字符串作为键
  • 遍历原数组时,对应键的值累加子数组的第三个元素
  • 最后将映射对象的键值对转换为目标格式的二维数组

代码实现

// 原数组
let array = [[0, 1, 4.75], [0, 1, 2.12], [0, 3, 8.1]];

// 处理函数
function mergeSameSubarrays(arr) {
  const map = {};
  arr.forEach(item => {
    // 用前两个元素拼接成唯一键
    const key = `${item[0]},${item[1]}`;
    map[key] = (map[key] || 0) + item[2];
  });
  // 把映射对象转成目标数组,处理浮点数精度问题
  return Object.entries(map).map(([key, sum]) => {
    const [a, b] = key.split(',').map(Number);
    // 保留两位小数并转成数字,避免浮点数运算的精度误差
    return [a, b, Number(sum.toFixed(2))];
  });
}

// 执行并输出结果
let expectedOutput = mergeSameSubarrays(array);
console.log(expectedOutput); // 输出 [[0, 1, 6.87], [0, 3, 8.1]]

补充说明

  • 浮点数运算可能存在精度问题(比如4.75+2.12直接相加可能得到6.869999999999999),用toFixed(2)处理后转成数字,能保证结果符合预期
  • 如果不需要固定小数位数,可以去掉Number(sum.toFixed(2)),直接使用sum

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:25:18