2012-02-04 86 views
2

所以,我需要填写的JavaScript双维数组和我做了以下的方法:填充在JavaScript双维数组使用for循环

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");。我做错了什么人?

+0

如果脚本停止执行,则浏览器应在其控制台中记录错误。希望这可以让你知道发生了什么;我们很难知道没有完整的代码,例如什么是roomWidth变量? – lpd 2012-02-04 00:28:15

+0

你在哪里宣布roombuffer? – riship89 2012-02-04 00:31:48

+0

谢谢大家的回答!我应该先检查javascript控制台,然后再问这里 – federicot 2012-02-04 01:47:34

回答

4

变化

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

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

你不需要循环之前声明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"); 
+0

您误解了javascript的范围规则。在循环之后,我和j不会被丢弃。 – david 2012-02-04 00:33:22

+0

对不起。修正了我的答案。 – chharvey 2012-02-04 00:43:25

+0

不要将它们称为局部变量:S,在for循环中声明它们并不好。普遍的共识是手动提升变量声明到包含函数的顶部是最好的。 – david 2012-02-04 00:46:36

1

看看this小提琴。

更改

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

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

您可以通过使用一个小的辅助函数

// 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))