在特定索引处合并两个数组

时间:2019-01-08 23:21:17

标签: javascript arrays merge

假设我有一个名为 array1:

的数组
var array1 = [1, 2, 5];

还有另一个名为 array2

var array2 = [3, 4];

我想通过在 array1的索引编号2 中插入 array2 来输出结果[1, 2, 3, 4, 5]

如何用JavaScript实现呢?

编辑:

更多注意事项:

  • 适当的数组突变无关紧要,两种方法都可以。
  • 数组元素的顺序无关紧要,当前的任务是在指定的索引处合并两个数组。

4 个答案:

答案 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);

文档:splicespread

答案 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);