【问题标题】:Javascript Changing values in arrays in while loopJavascript在while循环中更改数组中的值
【发布时间】:2020-10-03 01:42:46
【问题描述】:

假设我在数组中有数组:

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++
}

我的问题是每个while循环都给了我相同的arr(三个循环后的最终结果):

[[1, 2, 6],[7, 8, 9],[10, 11, 12]]

而不是每次:

[[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,但我不知道哪一部分出了问题……提前致谢!

【问题讨论】:

  • 好问题 OP。让我把你放在let (item of arr) 模式上,与for (var i = 0; i &lt; arr.length; i++) { arr[i] ... } 相比,我个人节省了很多时间,后者的可读性要差很多。

标签: javascript loops while-loop


【解决方案1】:

1 - 使用; 很重要。即使您的代码在您现在正在执行的环境中工作,也有很多引擎对此不满意。

2 - 您的 while 循环不会更改其中的任何迭代。如果您注意,您的time 变量不会随时被访问。它仅用于while loop 和您的time++ 添加的条件。它仅用作 while loop 的计数器,但不会在 for loops 内的任何地方用作数组的索引。

所以你基本上是在你的while loop 中执行整个代码 3 次,每次都完全相同。

3 - 您的第一行 currentarr = JSON.parse(JSON.stringify(arr)) 在特定时刻创建了您的 arr 变量的表示。然后你在if(currentarr[i][j]&gt;2){ 行上使用这个currentarr 变量执行比较,但是你在原来的arr 变量上加1:arr[i][j]++

我真的怀疑那是你真正的意图。

【讨论】:

  • ✊ 分号帮起来了。两组不必要的大括号,但传递了分号,tsk-tsk。
  • @Christian 是的,我想提一下,但让我们让他/她放松一下,呵呵。 (但无疑是更清晰的代码:始终使用分号,从不使用不必要的大括号)
  • 谢谢 :) 我一定会使用分号。对于第三点,这个问题中的代码与我的原始代码具有相同的结构(太长了)。 JSON 行用于创建深层副本。我只是想也许这会以某种方式导致我的问题,所以我把它包括在那里。再次感谢!
【解决方案2】:

您的代码按预期工作。您的浏览器似乎正在实时更新日志。

来自MDN page on console.log()

请注意,如果您在最新版本的 Chrome 和 Firefox 中记录对象,您在控制台上记录的内容是对该对象的引用,这不一定是您当时的对象的“值”调用console.log(),但它是你打开控制台那一刻的对象的值。

另外,来自同一页面:

不要使用console.log(obj),使用console.log(JSON.parse(JSON.stringify(obj)))

这样您就可以确定在您登录时看到了obj 的值。否则,许多浏览器会提供实时视图,该视图会随着值的变化而不断更新。这可能不是你想要的。


这与您的问题无关,但我建议您声明变量。例如,而不是

for (i = 0; i < currentarr.length; i++)

for (let i = 0; i < currentarr.length; i++)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    相关资源
    最近更新 更多