如何将数组B的元素间隔插入到数组A中实现交叉合并
实现两个数组元素交替插入的方案
你之前用splice正向遍历实现报错的核心原因是:每次插入元素都会让原数组a的长度+1,后续元素的索引整体后移1位,原定的插入位置会出现偏移,最终得到错误结果。
方案1:生成新数组(推荐,无副作用)
不需要修改原数组,代码更简洁可控,适合绝大多数场景:
let a = [1, 3, 5, 7] let b = [2, 4, 6, 8] // 每个a的元素后紧跟对应位置的b元素,再压平得到结果 a = a.flatMap((item, index) => [item, b[index]])
如果两个数组长度不一致,可以加兼容性判断:
a = a.flatMap((item, index) => b[index] ? [item, b[index]] : [item]) // 要是b更长的话,最后再拼接b剩余的元素即可 if (b.length > a.length) { a = a.concat(b.slice(a.length)) }
方案2:修改原数组(用倒序插入规避索引偏移问题)
如果必须直接修改原数组a,就倒序遍历数组b插入,后续的插入操作不会影响前面的索引位置:
let a = [1, 3, 5, 7] let b = [2, 4, 6, 8] // 从最后一位开始倒序插入 for (let i = b.length - 1; i >= 0; i--) { a.splice(i + 1, 0, b[i]) }
内容的提问来源于stack exchange,提问作者tmiliketurtles
相关产品推荐
相关产品推荐

