如何在保持目标数组长度不变的前提下合并两个数组
问题描述
需要将array_A合并到array_B中,要求合并后的结果数组长度与原array_B完全一致。举个例子:
const array_A = [1, 2, 3, 4]; const array_B = [0, 0, 0, 0, 0, 0, 0];
期望得到的结果是:
const result = [1, 2, 3, 4, 0, 0, 0];
但直接用array_A.concat(array_B)会得到长度为11的数组,显然不符合要求:
[1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0];
解决方案
这里提供几种可行的实现方式:
方法一:slice + concat 拼接
思路是先保留array_A的所有元素,再截取array_B中从array_A长度位置开始的剩余元素,最后把两部分拼接起来,结果长度自然和array_B一致。
const array_A = [1, 2, 3, 4]; const array_B = [0, 0, 0, 0, 0, 0, 0]; const result = array_A.concat(array_B.slice(array_A.length)); // result: [1, 2, 3, 4, 0, 0, 0]
方法二:splice 替换元素
如果允许修改原数组,可以直接用splice替换array_B开头的元素;如果需要保留原数组,先做一次浅拷贝再操作。
const array_A = [1, 2, 3, 4]; const array_B = [0, 0, 0, 0, 0, 0, 0]; // 浅拷贝原array_B,避免修改原数组 const result = [...array_B]; // 从索引0开始,替换掉array_A长度的元素,换成array_A的内容 result.splice(0, array_A.length, ...array_A); // result: [1, 2, 3, 4, 0, 0, 0]
方法三:map 遍历生成新数组
遍历array_B的每个元素,判断当前索引是否在array_A的范围内,是则取array_A对应元素,否则保留array_B的元素,可读性较强。
const array_A = [1, 2, 3, 4]; const array_B = [0, 0, 0, 0, 0, 0, 0]; const result = array_B.map((item, index) => index < array_A.length ? array_A[index] : item ); // result: [1, 2, 3, 4, 0, 0, 0]
内容的提问来源于stack exchange,提问作者Rio
相关产品推荐
相关产品推荐

