使用JavaScript合并二维数组重复记录:按首两元素拼接值聚合
合并JavaScript二维数组中的重复记录
问题描述
给定以下二维数组:
let array = [ ["a23","3000","0","ES08"], ["a23","3000","0","ES93"], ["a23","3000","0","ES71"], ["12w","3007","0","ES34"], ["12w","3007","0","ES56"], ["1v8","3008","0","ES08"] ];
重复判定规则:当数组元素的第0位与第1位拼接值(array[i][0] + array[i][1])相同时,视为重复记录。
需求:将重复记录合并为单条,把对应元素的最后一列值拼接在一起,最终得到仅包含唯一记录的数组,预期结果如下:
[ ["a23","3000","0","ES08ES93ES71"], ["12w","3007","0","ES34ES56"], ["1v8","3008","0","ES08"] ]
实现方案
使用Map结构跟踪唯一键(拼接后的第0+第1位),遍历数组时合并重复项的最后一列值,最后将Map的值转换为数组即可。
完整代码
let array = [ ["a23","3000","0","ES08"], ["a23","3000","0","ES93"], ["a23","3000","0","ES71"], ["12w","3007","0","ES34"], ["12w","3007","0","ES56"], ["1v8","3008","0","ES08"] ]; // 初始化Map存储唯一键与合并后的元素 const mergedMap = new Map(); array.forEach(item => { const key = item[0] + item[1]; if (!mergedMap.has(key)) { // 首次遇到该键,复制前3项并初始化最后一项 mergedMap.set(key, [...item.slice(0, 3), item[3]]); } else { // 已存在该键,拼接最后一列值 const existingItem = mergedMap.get(key); existingItem[3] += item[3]; } }); // 将Map的值转换为数组,得到最终结果 const mergedArray = Array.from(mergedMap.values()); console.log(mergedArray);
逻辑说明
- 键生成:用每个元素的第0位和第1位拼接成唯一键,确保重复项被精准识别。
- Map存储:首次遇到键时,复制元素的前3项并将最后一项初始化为当前值;后续遇到相同键时,直接拼接最后一列的内容。
- 结果转换:通过
Array.from()将Map的values集合转换为目标数组,得到去重合并后的结果。
内容的提问来源于stack exchange,提问作者Digvijay Anand
相关产品推荐
相关产品推荐

