如何根据子数组前两个元素对第三个元素求和合并数组?
数组合并求和实现方案
需求明确:给定一个二维数组,每个子数组包含三个元素,需要将前两个元素完全相同的子数组合并,合并后的子数组前两个元素不变,第三个元素取所有符合条件的子数组第三个元素的和。
实现思路
- 用临时对象做中间映射,将子数组前两个元素拼接成唯一字符串作为键
- 遍历原数组时,对应键的值累加子数组的第三个元素
- 最后将映射对象的键值对转换为目标格式的二维数组
代码实现
// 原数组 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
相关产品推荐
相关产品推荐

