javascript - JavaScript 中的传播操作符有什么意义,尤其是在这个例子中?
问题描述
我现在在FreeCodeCamp学习,这是一个挑战:
“我们定义了一个函数,copyMachine,它以 arr(一个数组)和 num(一个数字)作为参数。该函数应该返回一个由 arr 的 num 个副本组成的新数组。我们已经为您完成了大部分工作,但它还不能很好地工作。使用扩展语法修改函数,使其正常工作(提示:我们已经介绍过的另一种方法在这里可能会派上用场!)。
这是一个解决方案:
function copyMachine(arr, num) {
let newArr = [];
while (num >= 1) {
// Only change code below this line
newArr.push([...arr])
// Only change code above this line
num--;
}
return newArr;
}
console.log(copyMachine([true, false, true], 2));
newArr.push(arr)
如果我可以改为添加并获得相同的结果,那么添加额外的括号和点 (...) 有什么意义?结果是:[ [ true, false, true ], [ true, false, true ] ]
解决方案
这是参考的问题。
使用此语法newArr.push(arr)
时,您从参数中推送原始数组,因此每当arr
更改其内容时, newArr 中的数组也会更新,因为它始终是同一个数组。
使用扩展语法时,您实际上是在推送arr
. 这意味着它是一个新数组,与您传递给函数的数组无关
考虑这个
function copyMachine(arr, num) {
let newArr = [];
while (num >= 1) {
// Only change code below this line
newArr.push(arr)
// Only change code above this line
num--;
}
return newArr;
}
const oldArr = [true, false, true];
const newArr = copyMachine(oldArr, 2);
oldArr.push(true);
console.log(newArr); // contains an element added to the old array