当push()在for循环中运行时浏览器崩溃的原因如下所示[复制]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当push()在for循环中运行时浏览器崩溃的原因如下所示[复制]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
- Copy array by value 33回答
我试图将数组中的每个值乘以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