Javascript 增加了解-在循环内使用扩展运算符复制阵列

Javascript 增加了解-在循环内使用扩展运算符复制阵列,javascript,arrays,Javascript,Arrays,我定义的同一个函数有两个版本,copyMachine将arr和num作为参数。该函数应该返回一个由arr的num个拷贝组成的新数组 我不明白的是,为什么多维数组不输出,而是在下面的第一个代码块中输出单个数组?代码有什么问题?我真的需要努力去理解为什么 据我所知,newArr会在while循环的每个新迭代中重新初始化。在此上下文中,“重新初始化”一词是否意味着重置数组使其为空?有没有办法通过console.log查看这一点 最后,在这种特定情况下,当我们重新初始化循环中的数组时,这是否意味着我们无

我定义的同一个函数有两个版本,copyMachine将arr和num作为参数。该函数应该返回一个由arr的num个拷贝组成的新数组

我不明白的是,为什么多维数组不输出,而是在下面的第一个代码块中输出单个数组?代码有什么问题?我真的需要努力去理解为什么

据我所知,newArr会在while循环的每个新迭代中重新初始化。在此上下文中,“重新初始化”一词是否意味着重置数组使其为空?有没有办法通过console.log查看这一点

最后,在这种特定情况下,当我们重新初始化循环中的数组时,这是否意味着我们无法构建多维数组

function copyMachine(arr, num) {
  let newArr = [];
  while (num >= 1) {
    newArr = [...arr];
    num--;
  }
  return newArr;
}
然后我还有这个代码块,它在循环中简单地添加了.push方法。这似乎允许构建多维数组。我不明白为什么这会阻止上面的问题,即newArr将在每次迭代中重新初始化

function copyMachine(arr, num) {
  let newArr = [];
  while (num >= 1) {
    newArr.push([...arr]);
    num--;
  }
  return newArr;
}

非常感谢您的帮助。

此行在您的解决方案中不正确:

newArr = [...arr];
每次您说从arr获取所有元素并创建新数组时,请将其保存到newArr变量

试试看:

newArr = [...newArr, [...arr]];
您的新阵列将不会被清理,您将向已存在的阵列添加新阵列。

newArr=[…arr]; 此行将arr值复制到newArr,这里您将arr值分配给new arr 根据创建arr副本的要求,您需要生成一个新数组,并将arr作为第二个函数中出现的新项添加到newarr中 ie>>newArr.push[…arr]


扩展运算符用于将源数组/对象的值复制到目标源/对象。当编辑目标对象时,源对象不受影响,反之亦然,问题是在第一种情况下,每个循环迭代都会覆盖newArr。在记录以下前后的值时,您可以在此处看到这一点:

函数copyMachinearr,num{ console.log`copyMachine调用了 num:${num} arr:${formatForDisplayarr}` 设newArr=[]; 而num>=1{ console.log`->循环的开始- newArr:${formatForDisplaynewArr} num:${num}`; newArr=[…arr]; num-;
console.log`在代码的第一位,您不断地覆盖数组。因此,循环是不相关的,代码相当于if num>=1 newArr=[…arr]push从不覆盖newArr数组,而是向新数组添加元素it@VLAZ当你说持续覆盖时,我可以请你展开吗?你是指在每个console.log上还是在函数内部?@user1554264,因为newArr=[…arr]覆盖newArr的旧值。因为它在循环中,所以我指的是每次循环迭代。