Mys*_*cal -2 javascript arrays merge
假设我有一个名为array1的数组:
var array1 = [1, 2, 5];
Run Code Online (Sandbox Code Playgroud)
我还有另一个叫做array2:
var array2 = [3, 4];
Run Code Online (Sandbox Code Playgroud)
我要输出的结果[1, 2, 3, 4, 5]
通过将数组2 在索引号2的阵列1。
如何在 JavaScript 中实现这一点?
编辑:
更多注意事项:
您可以尝试将的元素分散 到 中,这会在索引处添加一系列参数(可选参数删除将被忽略)。会就地修改。b
splice
i
0
a
const mergeInPlace = (a, b, i=0) => a.splice(i, 0, ...b);
const a = [1, 2, 5];
const b = [3, 4];
mergeInPlace(a, b, 2);
console.log(a);
Run Code Online (Sandbox Code Playgroud)
undefined
如果您发现返回变异参数具有误导性,您可以添加大括号来强制函数返回。
如果你想避免突变,传播slice
可能是最简单的:
const merge = (a, b, i=0) => [...a.slice(0, i), ...b, ...a.slice(i)];
const a = [1, 2, 5];
const b = [3, 4];
console.log(merge(a, b, 2));
Run Code Online (Sandbox Code Playgroud)
我想出了一种可能的实现:
// merge 'b' with 'a' at index 'i'
function merge(a, b, i=0) {
return a.slice(0, i).concat(b, a.slice(i));
}
var result = merge([1, 2, 5], [3, 4], 2);
console.log(result);
Run Code Online (Sandbox Code Playgroud)
如果您不想改变原始数组,您可以将切片展开到新数组中:
var array1 = [1, 2, 5];
var array2 = [3, 4];
function merge(a1, a2, i){
return [...a1.slice(0,i), ...a2, ...a1.slice(i)]
}
console.log(merge(array1, array2, 2))
// negative indexing too
console.log(merge(array1, array2, -2))
Run Code Online (Sandbox Code Playgroud)