当push()在for循环中运行时浏览器崩溃的原因如下所示[复制]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当push()在for循环中运行时浏览器崩溃的原因如下所示[复制]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我试图将数组中的每个值乘以2并将值推送到每个循环的另一个数组。我不知道为什么以下代码似乎会导致崩溃浏览器的无限循环。我有其他解决方案可以得到相同的结果,但我只是想知道崩溃背后的根本原因所以请教育我。谢谢!

multipliedBy([1,2,3], 2) //expected result: [1,2,3,2,4,6]

function multipliedBy(arr, num){
   var oldArr = arr;
   for(var i=0;i<arr.length;i++){
      oldArr.push(arr[i] * num);
   }
   return oldArr;
}
答案

尝试使用push()克隆数组而不是引用相同的数组,

console.log(multipliedBy([1,2,3], 2)) //expected result: [1,2,3,2,4,6]

function multipliedBy(arr, num){
   var oldArr = [...arr]; //clone using spread 
   for(var i=0;i<arr.length;i++){
      oldArr.push(arr[i] * num);
   }
   return oldArr;
}
另一答案

当你做var oldArr = arr;时,它是对arr的引用。在循环中,你正在查看长度arr.length,当你推到oldArr时,你正在推动arr并且长度不断增加,所以你继续循环。

function multipliedBy(arr, num) {
  var oldArr = arr.slice(0);
  for (var i = 0; i < arr.length; i++) {
    oldArr.push(arr[i] * num);
  }
  return oldArr;
}

console.log(multipliedBy([1, 2, 3], 2))

以上是关于当push()在for循环中运行时浏览器崩溃的原因如下所示[复制]的主要内容,如果未能解决你的问题,请参考以下文章

如果在循环中包含PHP中的文件,它每次在循环中运行时都会访问该文件吗?

在 Azure 中运行时,ML.NET Tensorflow 图像分类崩溃并出现 SEHException

当程序在 IntelliJ 中运行时,为啥我会收到 SSLHandshakeException 作为 JAR?

在 github 操作中运行时 mv 命令不起作用

当应用程序在权限处理中运行时,颤振蓝牙给出错误

当命令在 Ubuntu 终端中运行时,为啥 Dart 的“Process.start”不能执行 Ubuntu 命令?