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

合并多个数组且保留各数组对应索引顺序的最优实现方案是什么

实现方案

你需要的是按索引对齐交叉合并:依次取所有数组同索引位置的元素拼接,再拼接下一个索引位的元素,以下是兼顾性能与简洁度的可选方案:

方案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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:48:03