合并多个数组且保留各数组对应索引顺序的最优实现方案是什么
实现方案
你需要的是按索引对齐交叉合并:依次取所有数组同索引位置的元素拼接,再拼接下一个索引位的元素,以下是兼顾性能与简洁度的可选方案:
方案1:简洁ES6+实现(适合数组长度一致的场景)
代码最简洁,可读性最高,千级以内数据量性能无感知:
const merged = arr1.flatMap((item, index) => [item, arr2[index], arr3[index]]);
方案2:高性能for循环实现(适合大数据量/数组长度不一致场景)
时间复杂度为O(n)(n为最长数组的长度),大数据量下性能最优,同时自动跳过短数组的空值:
const maxLength = Math.max(arr1.length, arr2.length, arr3.length) const merged = [] for (let i = 0; i < maxLength; i++) { arr1[i] && merged.push(arr1[i]) arr2[i] && merged.push(arr2[i]) arr3[i] && merged.push(arr3[i]) }
方案3:通用多数组合并(支持任意数量输入数组)
封装为通用函数,可传入任意个数组完成按索引交叉合并,灵活度最高:
function mergeByIndex(...arrs) { const maxLen = Math.max(...arrs.map(arr => arr.length)) return Array.from({ length: maxLen }, (_, i) => arrs.map(arr => arr[i]).filter(Boolean) ).flat() } // 调用示例 const merged = mergeByIndex(arr1, arr2, arr3)
选型建议
- 小数据量、数组长度固定一致:选方案1
- 十万级以上大数据量、有短数组兼容需求:选方案2
- 需要适配多数组输入的通用场景:选方案3
内容的提问来源于stack exchange,提问作者JSharles
相关产品推荐
相关产品推荐

