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

使用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);

逻辑说明

  1. 键生成:用每个元素的第0位和第1位拼接成唯一键,确保重复项被精准识别。
  2. Map存储:首次遇到键时,复制元素的前3项并将最后一项初始化为当前值;后续遇到相同键时,直接拼接最后一列的内容。
  3. 结果转换:通过Array.from()将Map的values集合转换为目标数组,得到去重合并后的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:45:36