有什么方法可以使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
的元素不应更改。
答案 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];