使非破坏性的JavaScript拼接

时间:2018-07-03 07:57:03

标签: javascript

有什么方法可以使splice()无损?

我需要做的就是在调用函数后保持arr2不变。

function foo(arr1, arr2, n) {
   let result = arr2;
   result.splice(n, 0, ...arr1.slice(0, arr1.length));
   console.log(arr2);
}

foo(["I'm", "not", "done"], ["sorry", "yet"], 1);

尽管它返回sorry,I'm,not,done,yet,这是我想要的,但是arr2的元素不应更改

5 个答案:

答案 0 :(得分:3)

您可以(浅)复制该数组,然后再使用.concat对其进行修改。

let result = [].concat(arr2);
// ... modify result...

答案 1 :(得分:1)

您可以使用“非破坏性”功能AKA slice
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

这是一个SO问题,其中slice和splice之间有区别:JavaScript Array splice vs slice

语法完全一样,因此您只需要删除一个字母

function foo(arr1, arr2, n) {
   let result = arr2;
   result.slice(n, 0, ...arr1.slice(0, arr1.length));
   console.log(arr2);
}

foo(["I'm", "not", "done"], ["sorry", "yet"], 1);

答案 2 :(得分:0)

选项1:

您可以使用array.concat()

请找到以下示例:

function foo(arr1, arr2, n) {
  let result = [].concat(arr2);
  result.splice(n, 0, ...arr1.slice(0, arr1.length));
  console.log(arr2);
  console.log(result);
}

foo(["I'm", "not", "done"], ["sorry", "yet"], 1);

选项2:

使用@Seblor上面评论中提到的array.slice(),例如let result = arr2.slice();

以下示例:

function foo(arr1, arr2, n) {
  let result = arr2.slice();
  result.splice(n, 0, ...arr1.slice(0, arr1.length));
  console.log(arr2);
  console.log(result);
}

foo(["I'm", "not", "done"], ["sorry", "yet"], 1);

答案 3 :(得分:0)

尝试一下。没有参数的切片函数会复制数组(浅)。

let result = arr2.slice();

答案 4 :(得分:0)

在函数中,您还可以使用传播运算符(如果使用ES2015)来创建arr2的副本:

let result = [...arr2];