增强了2D数组中的循环 - JavaScript

时间:2010-12-11 23:23:40

标签: javascript multidimensional-array foreach

我在Javascript中创建了以下2D数组

// Create basic linear array
var ImgArray = new Array(4);

// Do the 2D array for each or the linear array slots
for (i=0; i < 4 ; i++) {
    ImgArray[i] = new Array(4)
}

现在我想用2'增强的for循环'来迭代它。但我坚持如何使用循环,因为只有ImgArray声明了这样。例如;

// Load the images
for(var i in ImgArray) { 
    for( ??? ) {           // How would i do this? What do i state as an array?
          ///...
    }
    document.write("<br>");
}

任何建议都很受欢迎

3 个答案:

答案 0 :(得分:16)

假设您创建的阵列,循环如下所示:

var i, j, entry, ImgArray;

// Create the array
ImgArray = new Array(4);
for (i=0; i < 4 ; i++) {
    ImgArray[i] = new Array(4);
}

// Loop through both dimensions
for (i = 0; i < ImgArray.length; ++i) {
    entry = ImgArray[i];
    for (j = 0; j < entry.length; ++j) {
        // Do something with entry[j]
    }
}

这是因为在JavaScript中没有二维数组。 (事实上​​,即使是arrays aren't really arrays,但是不要去那里。)有#34;数组&#34;,数组条目可以是另一个数组,但是一个数组条目可能更长或者比其他人短。因此,您检索该数组并循环长度,这可能与同一&#34;维度&#34;中的其他长度不同。

请注意,我上面没有使用for..in不要使用for..in来遍历数组,除非你真的知道自己在做什么; details here。 (如果你真的知道你正在做什么并采取足够的预防措施,那很好,但你引用的代码没有采取必要的预防措施。){{1 迭代数组的索引,它枚举对象的属性名称。

偏离主题#1 :在JavaScript中,约定(您可以自由忽略)仅对构造函数使用初始上限(for..in)。< / p>

偏离主题#2 :您可能会考虑使用数组文字(ImgArray)而不是[entry, entry, entry],但这取决于您正在做什么。

非主题#3 :依赖分号插入是一个非常糟糕的主意(与new Array(...)行一样)。确保在他们需要的地方加上分号,或者你发现你不能正确地缩小你的脚本和/或你要打击浪费时间的奇怪错误。 : - )

答案 1 :(得分:3)

这不是“增强的for循环”。不管怎么说,你不应该以这种方式迭代Array实例,至少在你将它们在语义上作为整数索引数组处理时。

使用原始

for (var i = 0; i < 4; ++i)

方法(不要忘记var )。也不要打扰

var ImgArray = new Array(4);

只需写下

var ImgArray = [];

答案 2 :(得分:1)

你必须为这两个

做一个for循环
for (var i in array){
   for(var j in array[i]){//do stuff here}
}