我目前正在freecodecamp上学习JavaScript,他们在其中的一个练习中为嵌套循环提供了一个示例:

 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]);
  }
}

使用console.log = 1 2 3 4 5 6时未定义。

我或多或少了解for循环,并且我了解[i]和[j]用于访问数组(我认为吗?)。我只是不明白为什么最后只打印出这些数字?我发现这个问题在几年前被问到了,但它只是说明了如何编写它们,而不是它们是如何工作的:

For loop in multidimensional javascript array

我将其分解为:
var arr = [  [1,2], [3,4], [5,6]];for (var i=0; i < arr.length; i++) {
 console.log(arr[i]);}

哪个打印出来
[ 1, 2 ]
[ 3, 4 ]
[ 5, 6 ]
undefined


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]);  }}

输出:
[ 1, 2 ]
[ 1, 2 ]
[ 3, 4 ]
[ 3, 4 ]
[ 5, 6 ]
[ 5, 6 ]
undefined


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[j]);  }}

打印出来
[ 1, 2 ]
[ 3, 4 ]
[ 1, 2 ]
[ 3, 4 ]
[ 1, 2 ]
[ 3, 4 ]
undefined

我了解前两个arr [i]。该循环遍历数组,并打印出各个元素(在本例中为数组),在第二个中,我猜它只做了两次,因为有两个循环。我不明白的是:
  • 为什么没有打印出arr [j]中的最后一个数组(
    [5,6]去吗?)
  • 为什么arr [i] [j]突然消除了数组而只是
    打印出数字
  • ,其中“undefined”来自

  • 有人可以帮我解决这个问题,并解释在控制台中打印出来之前代码所采取的步骤吗?我真的很想了解它,但是甚至不知道如何以正确的方式搜索这个问题。

    最佳答案

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

    这是一个数组数组。像这样阅读起来会更容易一些:
    var arr = [
                [1,2],
                [3,4],
                [5,6]
              ];
    

    这样一来,您可以轻松地看到一个由3个数组组成的数组。外部的“for”将循环遍历每个第一级数组。因此,当i = 0时,第一个外部for循环将获取第一个内部数组[1,2]:
    for (var i=0; i < arr.length; i++) {
        //First time through i=0 so arr[i]=[1,2];
    }
    

    在内部循环中,您将一次遍历3个内部阵列中的每一个。
    for (var j=0; j < arr[i].length; j++) {
        //Handle inner array.
    }
    

    此参数获取内部数组的长度:
    arr[i].length
    

    因此,第一次通过外循环i = 0且arr [i]等于[1,2],因为您要获取第0个元素。请记住,数组元素总是从0开始计数,而不是从1开始。

    最后,您将使用以下命令打印结果:
    console.log(arr[i][j]);
    

    第一次使用可以将其分解。 i = 0和j = 0。 arr [0] [0]转换为从外部数组中获取第一个元素,然后从第一内部数组中获取第一个元素。在这种情况下,它是“1”:
    [
        [1,2], <-- 0
        [3,4], <-- 1
        [5,6]  <-- 2
    ];
    

    该代码将循环遍历第一个第一组[1,2],然后遍历第二个[3,4],依此类推。

    10-07 19:57
    查看更多