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

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 中实现这一点?

编辑:

更多注意事项:

  • 阵列突变就位无关紧要,无论哪种方式都可以。
  • 数组元素的顺序无关紧要,手头的任务是在指定索引处合并两个数组。

ggo*_*len 7

您可以尝试将的元素分散 到 中,这会在索引处添加一系列参数(可选参数删除将被忽略)。会就地修改。bsplicei0a

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)


Mys*_*cal 5

我想出了一种可能的实现:

// 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)

  • 我认为这实际上是最优雅的,因为它在一行中完成了整个事情并且不会改变输入数组。 (2认同)
  • @mbj 我同意这比所有其他人更容易阅读并且使用更少的代码。 (2认同)

Mar*_*yer 5

如果您不想改变原始数组,您可以将切片展开到新数组中:

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)