【问题标题】:Nested For loop printing a multidimensional array arr[i][j]; surprising output of three numbers嵌套 For 循环打印多维数组 arr[i][j];三个数字的惊人输出
【发布时间】:2017-05-15 03:00:14
【问题描述】:

为了分析代码,我添加了“break”。我几乎是一个初学者,而且 真的很难理解为什么这个代码文档会写“135”。 只要 i 小于 arr.length,就给 i 加一,那一清。 第二行指的是arr[i].length,我研究后也不知道那是什么。 也许 arr[0]、arr[1] 和 arr[2] = arr[i].length 的长度,所以是 2? 那么内部for循环的执行我根本不明白。

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++) {
        document.write(arr[i][j]);
        break;
    }
}

【问题讨论】:

  • 了解 break 的作用 - 即在您的情况下,它超出了您的期望(谢谢,我整个星期都在这里,请尝尝鱼)
  • 我知道它的作用,我不了解内部 for 循环。显然,无论是否中断,它都不会改变我的理解。
  • @CodeLearner 你对arr[i].length 的理解很好。请注意,arr[i] 只是内部数组之一。
  • 真的吗?有休息,你会得到 1,3,5 .. 没有休息,你会得到 1,2,3,4,5,6 - 如果你问我,那是“不同的”
  • 仍然不了解内部 for 循环的工作原理。希望有人能加入进来。

标签: javascript multidimensional-array


【解决方案1】:

流程如下:

var arr = [
  [1,2], [3,4], [5,6]
];
for (var i=0; i < arr.length; i++) {
   // Inside this first loop we are dealing with an 
   // item in arr (e.g., [1,2])
   for (var j=0; j < arr[i].length; j++) {
        // Inside this loop we are dealing with an item
        // from the previous loop (e.g, 1)
        // We write the one and then exit the inner loop
        // and move on to the next set of pairs.
        document.write(arr[i][j]);
        break;
   }
}

有时使用变量更容易理解。这是等价的:

var arr = [
  [1,2], [3,4], [5,6]
];
for (var i=0; i < arr.length; i++) {
    var pair = arr[i];
    for (var j=0; j < pair.length; j++) {
        var num = pair[j];
        document.write(num);
        break;
    }
 }

【讨论】:

    【解决方案2】:

    break 语句中断循环并继续执行循环后的代码。 (https://www.w3schools.com/js/js_break.asp)

    在这种情况下,'break'只是从内部循环中跳出来。

    外层循环会被执行3次。

    你可以像这样模拟所有的执行

    i=0;
      j=0; j<arr[0].length;
        document.write(arr[0][0]);    // output 1
        break;                        // break inner loop
    
    i=1;
      j=0; j<arr[1].length;
        document.write(arr[1][0]);    // output 3
        break;                        // break inner loop
    
    i=2;
      j=0; j<arr[2].length;
        document.write(arr[2][0]);    // output 5
        break;                        // break inner loop
    

    ```

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多