【问题标题】:Second Part of nested loop confusion?嵌套循环混淆的第二部分?
【发布时间】:2016-07-17 09:42:53
【问题描述】:

很抱歉在这里提问,但我已经观看了无数视频并阅读了一堆,但我仍然无法理解嵌套的 for 循环。我知道,虽然外循环运行一次,但内循环将运行 x 次。我听说过时钟的类比,有点。

例如:

var arr = [
  [1,2], [3,4], [5,6]
];
for (var i=0; i < arr.length; i++) {
  for (var j=0; j < arr[i].length; j++) {
    console.log(arr[i][j]);
  }
}

我知道第一个循环会像这样迭代 [1,2], [2,4], [5,6]; 为 0,1,2。

但是,内部 for 循环会发生什么?它会遍历1,2 3,4 5,6吗?还是会超过1、2、5?如果有人可以帮助我克服这种脑阻塞,我将非常感激!

【问题讨论】:

  • "会遍历1,2 3,4 5,6吗?"
  • 为什么不试试呢?
  • 添加一个刹车点并调试。你可以看到发生了什么

标签: javascript arrays for-loop multidimensional-array


【解决方案1】:

它会遍历 1,2 3,4 5,6 吗?

是的,没错,因为我们从 [1, 2] 数组开始并循环遍历其内容,所以我们输出 1 然后输出 2,然后我们转到 [3, 4] 数组并循环遍历其内容,输出 3 然后4,最后是[5, 6]数组,输出5和6。

验证和理解这些内容的最佳方法是使用调试器逐步完成它们。每个现代桌面浏览器都内置了一个功能齐全的调试器;内置在任何体面的 JavaScript IDE 中;对于像 NodeJS 这样的环境,如果你没有 IDE 来处理它,你可以使用像 node-inspector 这样的东西。

【讨论】:

    【解决方案2】:

    它非常简单。 看到你有一个外循环

    for (var i=0; i < arr.length; i++) {
    

    由于 arr 有 3 个元素,i 将迭代为 0、1、2。

    现在对于每个 0,1,2 ,您都有一个内部循环

    for (var j=0; j < arr[i].length; j++)
    

    所以说当i = 0, j 将从0 to arr[0].length 迭代,即0 to 2 当 i = 1 时,j 将从 0 迭代到 arr[1].length,以此类推。

    现在内部循环内部发生了什么: arr[i][j] 有一个控制台日志。所以

    i = 0, j = 0, arr[0][0] = 1
           j = 1, arr[0][1] = 2
    i = 1, j = 0, arr[1][0] = 3
           j = 1, arr[1][1] = 4, and so on...
    

    所以当你检查控制台时,你会得到 1,2,3,4,依此类推...

    您还可以运行以下代码:

    var arr = [
      [1, 2],
      [3, 4],
      [5, 6]
    ];
    for (var i = 0; i < arr.length; i++) {
      for (var j = 0; j < arr[i].length; j++) {
        console.log(arr[i][j]);
      }
    }

    【讨论】:

      【解决方案3】:

      第一个循环是正确的。由于 arr.length 为 3,它将像 0,1,2 一样迭代。

      内部循环将根据它们的长度遍历您的内部数组arr[i].length

      因此,在您的情况下,每个内部数组都是 0,1,因为 arr[i].length 对于每个内部数组都是 2。

      这是一个稍微修改的数组的例子:

      var arr = [
        [1,2], [3,4,7], [5,6]
      ];
      

      现在arr.length 仍然是 3,所以外循环交互:0,1,2

      但是内部循环会迭代:

      • 0,1 代表 i = 0
      • 0,1,2 代表 i = 1
      • 0,1 代表 i = 2

      因为arr[0].lengtharr[2].length 是2,而arr[1].length 是3

      【讨论】:

        【解决方案4】:

        控制台内循环结果如下:

        1
        2
        3
        4
        5
        6
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-11
          • 1970-01-01
          • 2015-06-18
          • 2022-11-16
          • 1970-01-01
          • 2021-05-26
          相关资源
          最近更新 更多