Javascript在while循环中更改数组中的值
假设我在一个数组中有数组:Javascript在while循环中更改数组中的值,javascript,loops,while-loop,Javascript,Loops,While Loop,假设我在一个数组中有数组: time = 0 arr = [[1,2,3], [4,5,6], [7,8,9]] 我尝试在每个while循环中记录arr while (time<3){ currentarr = JSON.parse(JSON.stringify(arr)) for(i=0;i<currentarr.length;i++){ for(j=0; j<currentarr[i].length; j++){ if(curr
time = 0
arr = [[1,2,3], [4,5,6], [7,8,9]]
我尝试在每个while循环中记录arr
while (time<3){
currentarr = JSON.parse(JSON.stringify(arr))
for(i=0;i<currentarr.length;i++){
for(j=0; j<currentarr[i].length; j++){
if(currentarr[i][j]>2){
arr[i][j]++
}
}
}
console.log(arr)
time++
}
而不是每次:
[[1, 2, 4],[5, 6, 7],[8, 9, 10]]
[[1, 2, 5],[6, 7, 8],[9, 10, 11]]
[[1, 2, 6],[7, 8, 9],[10, 11, 12]]
我刚开始学习Javascript,我不知道哪部分出错了。。。提前谢谢 1-使用它很重要;。即使您的代码在您现在正在执行的环境中工作,也有很多引擎对此不满意
2-您的while循环不会更改其中的任何迭代。如果您注意,您的时间变量在任何时候都不会被访问。它只在while循环和time++加法的条件下使用。它只作为while循环的计数器,但它不在for循环中的任何地方用作数组的索引
因此,您基本上在while循环中执行整个代码3次,每次都完全相同
3-第一行currentarr=JSON.parseJSON.stringifyarr在特定时刻创建arr变量的表示形式。然后使用这个currentarr变量在ifcurrentarr[i][j]>2{行上执行比较,但在原始arr变量上加上1:arr[i][j]+
我真的怀疑这是您真正想要的。-1-使用它很重要。即使您的代码在您现在正在执行的环境中工作,也有很多引擎对此不满意
2-您的while循环不会更改其中的任何迭代。如果您注意,您的时间变量在任何时候都不会被访问。它仅用于while循环和time++加法的条件中。它仅用作while循环的计数器,但不会在for循环中的任何地方用作数组的索引
因此,您基本上在while循环中执行整个代码3次,每次都完全相同
3-您的第一行currentarr=JSON.parseJSON.stringifyarr在特定时刻创建您的arr变量的表示形式。然后您使用此currentarr变量在ifcurrentarr[i][j]>2{行上执行比较,但在原始arr变量上加上1:arr[i][j]+
我真的怀疑这是您真正想要的。您的代码按预期工作。您的浏览器似乎正在实时更新日志 从: 请注意,如果您在最新版本的Chrome和Firefox中记录对象,那么您在控制台上记录的是对该对象的引用,它不一定是您调用console.log时该对象的“值”,而是您打开控制台时该对象的值 此外,从同一页: 不要使用console.logobj,请使用console.logJSON.parseJSON.stringifyobj 通过这种方式,您可以确保在记录obj时看到它的值。否则,许多浏览器会提供随值变化而不断更新的实时视图。这可能不是您想要的 这与您的问题无关,但我建议您声明变量 对于i=0;i
奥洛斯。关于第三点,这个问题中的代码与我的原始代码的结构相同,太长了。JSON行用于创建深度副本。我只是想也许这会导致我的问题,所以我把它包括在这里。再次感谢!好问题,让我把你放到arr模式的Let项上,就个人而言,与var i=0相比,它节省了我的大脑很多时间;i
[[1, 2, 4],[5, 6, 7],[8, 9, 10]]
[[1, 2, 5],[6, 7, 8],[9, 10, 11]]
[[1, 2, 6],[7, 8, 9],[10, 11, 12]]