如何合并两数组生成新数组:同索引元素交替,长数组剩余元素追加
数组元素交替排列的简洁实现方案
给定两个数组:
let array1 = [1,2,3,4,5,6,7] let array2 = ['a', 'b', 'c', 'd']
需要生成新数组,使两数组同索引元素交替排列,长数组剩余元素追加到末尾,预期结果:
let result = [1, 'a', 2, 'b', 3, 'c', 4,'d', 5, 6, 7]
要求实现简洁且不使用for of循环,可参考以下两种方案:
方案一:利用Array.from + flat + filter
const result = Array.from({ length: Math.max(array1.length, array2.length) }, (_, idx) => [array1[idx], array2[idx]]) .flat() .filter(item => item !== undefined);
逻辑说明:
- 用
Array.from创建一个长度等于两数组最大长度的数组,每个元素是对应索引的两个数组元素组成的子数组(短数组超出长度的位置会返回undefined) - 调用
flat()将二维数组扁平化处理 - 最后用
filter过滤掉所有undefined值,得到目标数组
方案二:利用forEach遍历最大长度
const result = []; Array(Math.max(array1.length, array2.length)).fill().forEach((_, idx) => { if (array1[idx] !== undefined) result.push(array1[idx]); if (array2[idx] !== undefined) result.push(array2[idx]); });
逻辑说明:
- 先创建一个长度为两数组最大长度的空数组,用
fill()填充后调用forEach遍历每个索引 - 依次判断对应索引的元素是否存在,存在则推入结果数组,实现交替排列,最后自动保留长数组的剩余元素
内容的提问来源于stack exchange,提问作者Grease
相关产品推荐
相关产品推荐

