Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使JavaScript拼接成为非破坏性的_Javascript - Fatal编程技术网

使JavaScript拼接成为非破坏性的

使JavaScript拼接成为非破坏性的,javascript,Javascript,有没有办法使拼接()无损 我需要做的是在调用函数后保留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); 虽然它返回对不起,我还没有完成,这是我想要的,但是arr2的元素不应该

有没有办法使
拼接()
无损

我需要做的是在调用函数后保留
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);
虽然它返回
对不起,我还没有完成,
这是我想要的,但是
arr2
的元素不应该改变

在使用
修改数组之前,您可以(浅层)复制数组

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

选项1:

你可以用

请查看以下示例:

函数foo(arr1、arr2、n){ 让结果=[].concat(arr2); 结果:拼接(n,0,…arr1.切片(0,arr1.长度)); 控制台日志(arr2); 控制台日志(结果); }
foo([“我”、“没有”、“完成”]、[“对不起”、“还没有”]、1)试试这个。不带参数的切片函数生成数组的(浅层)副本

let result = arr2.slice();
您可以使用“非破坏性”功能,也称为
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);

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


let result=[…arr2]

使用
切片
而不是
拼接
。相同的语法,但不是“破坏性的”。作为旁注:。出于可读性原因,我还更喜欢
slice()
制作副本。