如何在JavaScript中基于索引或ID合并两个嵌套数组
解决JavaScript嵌套数组合并问题
方法一:基于索引合并(假设数组顺序完全对应)
如果两个数组的元素顺序一一匹配(即array1第n项与array2第n项属于同一ID),可以直接用map遍历拼接:
const array1 = [[401, "John", "married"], [402, "Poul", "unmarried"]]; const array2 = [[401, 9654251, "john401@gmail.com"], [402, 9623427, "poul402@gmail.com"]]; // 用扩展运算符拼接对应索引的数组,slice(1)去除重复的ID const mergedByIndex = array1.map((item, index) => [...item, ...array2[index].slice(1)]); console.log(mergedByIndex);
方法二:基于共同ID合并(不依赖数组顺序)
如果数组元素顺序可能不一致,先将其中一个数组转为以ID为键的映射,再遍历合并:
const array1 = [[401, "John", "married"], [402, "Poul", "unmarried"]]; const array2 = [[401, 9654251, "john401@gmail.com"], [402, 9623427, "poul402@gmail.com"]]; // 将array2转为ID映射,键为ID,值为去除ID后的剩余元素 const array2Map = new Map(array2.map(item => [item[0], item.slice(1)])); // 遍历array1,根据ID匹配并拼接元素 const mergedById = array1.map(item => [...item, ...(array2Map.get(item[0]) || [])]); console.log(mergedById);
注:|| []用于处理ID不匹配的情况,避免报错,此时仅保留array1原元素。
最终结果
两种方法都会输出目标数组:
[[401, "John", "married", 9654251, "john401@gmail.com"], [402, "Poul", "unmarried", 9623427, "poul402@gmail.com"]]
内容的提问来源于stack exchange,提问作者user19891844
相关产品推荐
相关产品推荐

