我在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>");
}
任何建议都很受欢迎
答案 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}
}