首页 > 解决方案 > 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 ] ]

标签: javascriptarraysspread

解决方案


这是参考的问题。

使用此语法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


推荐阅读