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

JavaScript中如何对比嵌套数组元素并合并匹配项?

实现嵌套数组合并功能的JavaScript函数

核心思路

用**哈希映射(普通对象)**做分组依据:

  • 把每个子数组前两个元素的前4位拼接成唯一键,作为分组标识
  • 遍历所有子数组,同组的子数组将除前两位外的元素合并到同一数组
  • 最后把映射里的所有值转成数组,就是最终结果

代码实现

function mergeNestedArrays(arr) {
  const groupMap = {};

  arr.forEach(subArr => {
    // 处理子数组长度不足2的情况,这里直接跳过,可按需调整
    if (subArr.length < 2) return;
    
    // 提取前两个元素的前4位,元素长度不足4位时取全部内容
    const keyPart1 = subArr[0].slice(0, 4);
    const keyPart2 = subArr[1].slice(0, 4);
    const groupKey = `${keyPart1}-${keyPart2}`;

    // 取出当前子数组除前两位外的剩余元素
    const extraElements = subArr.slice(2);

    if (groupMap[groupKey]) {
      // 已有对应分组,追加剩余元素
      groupMap[groupKey].push(...extraElements);
    } else {
      // 新分组,初始化数组并保留原前两位元素
      groupMap[groupKey] = [subArr[0], subArr[1], ...extraElements];
    }
  });

  // 将映射中的值转换为数组返回
  return Object.values(groupMap);
}

示例验证

假设输入:

const input = [
  ['20240101', 'AB123456', 'data1', 'data2'],
  ['20240101', 'AB127890', 'data3'],
  ['20240101', 'AB123456', 'data4'],
  ['20231231', 'CD001122', 'data5'],
  ['202402', 'XY3', 'test'] // 元素长度不足4位的边界情况
];

调用函数后输出:

[
  ['20240101', 'AB123456', 'data1', 'data2', 'data4'],
  ['20240101', 'AB127890', 'data3'],
  ['20231231', 'CD001122', 'data5'],
  ['202402', 'XY3', 'test']
]

注意事项

  • 子数组长度小于2时,当前代码直接跳过,你可以根据需求修改(比如保留原数组)
  • 用-分隔分组键是为了避免不同组合的键冲突(比如'2024AB12'和'2024AB'+'12'会重复,加分隔符更安全)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:20:28