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
相关产品推荐
相关产品推荐

