【问题标题】:Filling a bi-dimensional array in JavaScript using a for loop使用 for 循环在 JavaScript 中填充二维数组
【发布时间】:2012-02-04 00:23:55
【问题描述】:

所以,我需要在 JavaScript 中填充一个二维数组,我这样做的方式如下:

var i = 0, j = 0;
for (i = 0; i < roomWidth / tileWidth; i += 1) {
     roomBuffer[i] = [];
}
for (i = 0; roomWidth / tileWidth; i += 1) {
     for (j = 0; j < roomHeight / tileHeight; j += 1) {
          roomBuffer[i][j] = 1;
     }
}
alert("Hello world");

问题在于它不仅不起作用,而且它之后的任何代码都没有执行。在这种情况下,alert("Hello world");。我做错了什么?

【问题讨论】:

  • 如果您的脚本停止执行,那么您的浏览器应该在其控制台中记录一个错误。希望这可以为您提供有关正在发生的事情的线索;如果没有完整的代码,我们很难知道,例如 roomWidth 变量是什么?
  • 你在哪里声明 roombuffer?
  • 感谢大家的回答!我应该在问这里之前检查一下 javascript 控制台

标签: javascript arrays for-loop


【解决方案1】:

改变

for (i = 0; roomWidth / tileWidth; i += 1) {

for (i = 0; i < roomWidth / tileWidth; i += 1) {

【讨论】:

    【解决方案2】:

    您不需要在循环之前声明 ij。如果它们的存在仅用于循环,则它们最好作为局部变量。此外,您还可以组合循环。

    另外,@Yuriy Zubarev 说的是对的。 for-loop 中的中间语句是一个在整个循环中都必须成立的条件。

    for (var i = 0; i < roomWidth / tileWidth; i++) {
         roomBuffer[i] = [];
         for (var j = 0; j < roomHeight / tileHeight; j++) {
              roomBuffer[i][j] = 1;
         }
    }
    alert("Hello world");
    

    【讨论】:

    • 您误解了 javascript 的作用域规则。 i 和 j 在循环之后不会被丢弃。
    • 不要称它们为局部变量 :S 并且在 for 循环中声明它们是不好的。一般的共识是最好手动将变量声明提升到包含函数的顶部。
    • @david 真的吗??我是 JavaScript 新手,但我已经用 Java 编码多年(好吧,所以只有 3 年),但我总是被教导最好在循环定义中声明循环计数器。 .
    • 那是因为 Java 是块作用域,而 javascript 是函数作用域。如果你在循环定义中声明它们,你只是在自欺欺人。
    【解决方案3】:

    看看thisfiddle。

    改变你的

    for (i = 0; roomWidth / tileWidth; i += 1)
    

    for (i = 0; i < roomWidth / tileWidth; i += 1)
    

    【讨论】:

      【解决方案4】:

      您可以使用一个小的辅助函数来简化您的代码

      // create an array of length len filled with value
      fill = function(len, value) {
          for (var a = []; len-- > 0; a.push(value));
          return a;
      }
      

      您的代码:

      size = roomWidth / tileWidth
      roomBuffer = fill(size, fill(size, 1))    
      

      【讨论】:

        猜你喜欢
        • 2012-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-28
        • 2017-03-06
        • 1970-01-01
        • 2021-12-03
        相关资源
        最近更新 更多