使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()
制作副本。