Javascript 为什么在如下所示的for循环中运行push()时浏览器会崩溃
我试图将数组中的每个值乘以2,然后在每个循环中将该值推送到另一个数组中。我不知道为什么下面的代码似乎触发了一个无限循环,导致浏览器崩溃。我有其他的解决方案来获得同样的结果,但我只是想知道崩溃背后的根本原因,所以请教育我。谢谢Javascript 为什么在如下所示的for循环中运行push()时浏览器会崩溃,javascript,for-loop,push,Javascript,For Loop,Push,我试图将数组中的每个值乘以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.
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;
}
multipledby([1,2,3],2)//预期结果:[1,2,3,2,4,6]
函数乘以(arr,num){
var oldArr=arr;
对于(var i=0;i当您执行var oldArr=arr;
时,它是对arr
的引用。在循环中,您查看的是长度arr.length
,当您推到oldArr时,您推到arr,长度不断增加,因此您保持循环
函数乘以(arr,num){
var oldArr=arr.slice(0);
对于(变量i=0;i console.log(乘以([1,2,3,2])
当您执行var oldArr=arr;
时,它是对arr
的引用。在循环中,您查看的是长度arr.length
,当您推到oldArr时,您推到arr,长度不断增加,因此您保持循环
函数乘以(arr,num){
var oldArr=arr.slice(0);
对于(变量i=0;i log(乘以([1,2,3,2])
使用克隆数组,而不是在使用push()时引用相同的数组
console.log(乘以([1,2,3],2))//预期结果:[1,2,3,2,4,6]
函数乘以(arr,num){
var oldArr=[…arr];//使用扩展进行克隆
对于(var i=0;i使用push()
时,用克隆数组,而不是引用相同的数组
console.log(乘以([1,2,3],2))//预期结果:[1,2,3,2,4,6]
函数乘以(arr,num){
var oldArr=[…arr];//使用扩展进行克隆
for(var i=0;i因为oldArr
和arr
指向同一个数组,因此arr.length
会随着.push()的每一次变化而变化。
我知道这不是你要求的,但我会作为一行代码来做:返回arr.concat(arr.map(elt=>elt*num))
谢谢大家!这些都是很好的答案。@Robin是的,我最终使用了map(),因为oldArr
和arr
指向同一个数组,因此arr.length
每推一次.push()
我知道这不是你要的,但我会这样做作为一行:返回arr.concat(arr.map(elt=>elt*num))
谢谢大家!这些都是很好的答案。@Robin是的,我最终使用了map()