【问题标题】:Hard Time with 2-D Array For-Loop Syntax二维数组 For 循环语法的困难时间
【发布时间】:2016-01-13 05:54:40
【问题描述】:

我有一些如下所示的代码,我明白它在做什么,但我不明白部分语法。我想知道是否有人可以向我解释。基本上,代码是用 0 到 2 之间的随机整数数组填充二维数组。我不明白的是,为什么我在第二个 for 循环之后将“result [i] [j]”放在下面。为什么我不直接放 result[j] 。我在网上找到了代码并且知道它的作用,但是我还是不明白那一点语法。

    function buildArray(width, height){
    var result= [];

    for (var i = 0 ; i < width; i++) {

        result[i] = [];

        for (var j = 0; j < height; j++) {
            result[i][j] = Math.floor(Math.random() * 3);
            console.log(result[i][j]);
        }
    }
    return result;
}

【问题讨论】:

    标签: javascript arrays for-loop multidimensional-array


    【解决方案1】:

    假设您将 widthheight 的值传递给函数 3...

    buildArray(3, 3);
    

    您可以将width 值视为代表“列”的数量,将height 值视为代表每列中的“项目”数量。

    在第一个 for 循环的第一次迭代中,result 有一个列。因为此时i 为零,我们可以说...

    result[0] = new Array();
    

    数组为空,但随后第二个 for 循环开始发挥作用。

    第二个 for 循环填充新调用的数组,在本例中使用 3 个随机生成的整数。

    假设第二个 for 循环的第一次迭代产生整数“2”,第二次迭代产生“0”,第三次产生“1”。这意味着resutl[0] 现在看起来像这样......

    result[0] = [2, 0, 1];
    

    ...所以...

    result[0][0] = 2;
    result[0][1] = 0;
    result[0][2] = 1;
    

    然后i 递增,并调用位置result[1] 处的新数组,然后填充3 个项目。等等等等。

    result 中第二个括号中的值表示 'height' 数组中值的索引位置,它本身由result 数组第一个括号中的索引位置指示。

    在示例结束时result 将是一个length = 3 数组(三个数组),每个数组包含三个随机生成的整数。

    尝试将console.log() 替换为类似的内容...

    console.log('result['+i+']['+j+'] = ' + result[i][j]);
    

    ...更好地了解正在生成的随机数的索引位置。

    你也可以去看看:Creating a custom two-dimensional Array @ javascriptkit.com

    【讨论】:

      【解决方案2】:

      2d 数组有 2 个参考点,把它想象成表 i 代表它的行,J 代表它的列,语法只是告诉程序要存储的值应该在第 i 行和第 j 列,如果你不提供第 i 个位置,它将无法识别要考虑的行 希望这会有所帮助:)

      【讨论】:

      • 是的,这是有道理的。非常感谢! :)
      【解决方案3】:

      让我们调试它:)

      function buildArray(width, height){
          var result= []; // declared a 1-D array
      
          for (var i = 0 ; i < width; i++) {
      
              result[i] = [];   // create another array inside the 1-D array. 
                                // result[0] = [];
      
                for (var j = 0; j < height; j++) {
      
                 result[i][j] = Math.floor(Math.random() * 3); // result[0][0] = some random number
                 console.log(result[i][j]);
              }
      
          }
          return result;
      }
      

      提出您的疑问:

      为什么我把result[i][j]放在第二个for循环之后。我为什么不直接输入result[j]

      如果你想这样做,你必须稍微修改代码。请参阅下面的代码以供参考

      function buildArray(width, height){
          var result= []; // declared a 1-D array
      
          for (var i = 0 ; i < width; i++) {
      
            // result[i] = [];    not required                              
              var my_array = [];   // you need to define a new array
              for (var j = 0; j < height; j++) {
                  my_array[j] = Math.floor(Math.random() * 3); // fill your new array with random numbers
                 //console.log(result[i][j]);   not required
              }
           result.push(my_array);  // you need to push your array into results
          }
          return result;
      }
      

      【讨论】:

        猜你喜欢
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-28
        • 2015-07-03
        • 1970-01-01
        • 2016-11-25
        相关资源
        最近更新 更多