假设我有一个名为 array1:
的数组var array1 = [1, 2, 5];
还有另一个名为 array2
var array2 = [3, 4];
我想通过在 array1的索引编号2 中插入 array2 来输出结果[1, 2, 3, 4, 5]
。
如何用JavaScript实现呢?
编辑:
更多注意事项:
答案 0 :(得分:2)
我想出了一种可能的实现方式:
// 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);
答案 1 :(得分:2)
您可以尝试使用splice
,它在索引i
处添加一系列参数(0
会忽略可选的参数删除)和散布运算符。请注意,a
将被修改。
const merge = (a, b, i=0) => a.splice(i, 0, ...b) && a;
var result = merge([1, 2, 5], [3, 4], 2);
console.log(result);
答案 2 :(得分:2)
如果您不想突变原始数组,可以将切片扩展到新数组中:
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))
答案 3 :(得分:0)
如果目标只是订购它们:
array1.concat(array2).sort();
var array1 = [1, 2, 5],
array2 = [3, 4];
let r = array1.concat(array2).sort();
console.log(r);
如果目标是插入某个索引:
array1.splice(2,0,array2);
array1.flat();
var array1 = [1, 2, 5],
array2 = [3, 4];
array1.splice(2,0,array2);
let r = array1.flat();
console.log(r);
作为替代方案,您可以使用功能性方法。之所以提供此功能,是因为我发现.splice
是一种使数组变异的丑陋方法,太接近slice
了,甚至没有返回您可能正在寻找的数组。
let combineAt = (n, a, b) =>
a.reduce((ac, cv, ci) =>
(n === ci) ?
(ac.push(b, cv), ac.flat()) :
(ac.push(cv), ac), []);
combineAt(2,array1,array2);
var array1 = [1, 2, 5],
array2 = [3, 4];
let combineAt = (n, a, b) => a.reduce((ac, cv, ci) => (n === ci) ? (ac.push(b, cv), ac.flat()) : (ac.push(cv), ac), []);
let r = combineAt(2, array1, array2);
console.log(r);