【问题标题】:2-Dimensional Javascript Array unable to fill with duel for loops二维 Javascript 数组无法填充决斗 for 循环
【发布时间】:2013-12-03 16:52:13
【问题描述】:

我正在编写一个需要使用 Javascript 二维数组的程序,因此我构建了这个测试台来尝试将值添加到数组中。

如您所见,如果您检查输出,循环会运行两次内部循环然后停止,不强制执行外部循环运行 10 次的要求。

谁能解释我做错了什么?

HTML:

<body>
  <input type="button" value="Press me!" id="pressMe" onclick="primaryCommand('textBox')">

  <textarea id="textBox"></textarea>
</body>

Javascript:

function primaryCommand(input){
  arrayTest(input);
}

function arrayTest(input){
  // How large can an array be and still be safe?
  var array = new Array(new Array());
  var obj = document.getElementById(input);
  obj.value="";

  var x = 0, y = 0;

  for (x = 0; x < 10; x++)
  {
    for (y = 0; y < 2; y++)
    {
      array[x][y] = "Hello World, x='" + x + "', y='" + y + "'\n";
      obj.value+=array[x][y];
    }
  }
}

输出:

Hello World, x='0', y='0'
Hello World, x='0', y='1'

【问题讨论】:

    标签: javascript for-loop multidimensional-array getelementbyid


    【解决方案1】:

    您的外部数组(由x 索引)只有一个成员(单个数组)。试试这个:

    function arrayTest(input){
      var array = [];
      var obj = document.getElementById(input);
      obj.value="";
    
      var x = 0, y = 0;
    
      for (x = 0; x < 10; x++)
      {
        array[x] = [];
        for (y = 0; y < 2; y++)
        {
          array[x][y] = "Hello World, x='" + x + "', y='" + y + "'\n";
          obj.value+=array[x][y];
        }
      }
    }
    

    【讨论】:

    • 这行得通,谢谢。你能解释一下发生了什么吗?我不太明白。
    • array[x] = []; 是否将数组添加到 x 中?我认为初始化var array = new Array(new Array()); 足以将一个数组放入每个x。它不是点击。 :(
    • 当你创建一个二维数组时,你实际上是在创建一个数组数组。当您执行var array = new Array(new Array()); 时,您真正在做的只是var array = [ [] ];。所以你只有一个内部数组,而每个x 确实需要一个。因此,当我们执行array[x] = []; 时,我们为每个x 创建一个新的内部数组,这正是我们想要的。这有意义吗?
    • 这真的很有趣,所以额外的new Array() 是多余的吗?因为我们根据您的建议在外循环中添加了一个新数组,所以我们不再需要这个:var array = new Array(new Array());,而是可以只使用它来初始化:var array = new Array();
    • 这就是我将其更改为 var array = []; 的原因。就个人而言,我更喜欢数组文字而不是 new Array(),因为它更简洁,并且类似于许多其他语言的数组语法。
    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2019-04-28
    相关资源
    最近更新 更多