二维数组中的增强 for 循环 - JavaScript
Posted
技术标签:
【中文标题】二维数组中的增强 for 循环 - JavaScript【英文标题】:Enhanced for loop in 2D Array - JavaScript 【发布时间】:2011-05-24 02:27:27 【问题描述】:我在 javascript 中创建了以下二维数组
// 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>");
任何建议都非常感谢
【问题讨论】:
另外:停止使用document.write()
- 这很邪恶:-)
document.write 可以,“增强的 for 循环”(for...in 数组)不行。
@Pointy:document.write
没有错,使用得当。
如果你使用var a = new Array(4)
,记住它会创建一个长度为4但不包含任何元素的数组,a[1]
会返回undefined
,但a.length
会返回4 .
@Tim Down, @Carlos - document.write()
是做它做的事情之一,它本质上并不是“坏”,但它是一种真正需要新的做事方式方法。更好的方法是在文档加载后通过 DOM 操作。 @Tim 那里的密钥正确使用。
【参考方案1】:
假设您已经创建了数组,循环如下所示:
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,但我们不要去那里。)有“数组”,一个数组条目可以是另一个数组,但一个数组条目可能比其他数组条目更长或更短。因此,您检索该数组并循环遍历 its 长度,这可能与同一“维度”中的其他数组不同。
请注意,我没有在上面使用for..in
。 不要使用for..in
循环遍历数组,除非你真的知道自己在做什么; details here。 (如果您确实真的知道自己在做什么并采取足够的预防措施,那很好,但您引用的代码没有采取必要的预防措施。)for..in
不 迭代数组的索引,它会枚举一个对象的属性名。
题外话#1:在 JavaScript 中,约定(您可以随意忽略)是仅对构造函数使用首字母大写 (ImgArray
)。
离题 #2:您可能会考虑使用数组字面量 ([entry, entry, entry]
) 而不是 new Array(...)
,但这取决于您在做什么。
题外话#3:依赖分号插入是一个非常糟糕的主意(就像你的ImgArray[i] = new Array(4)
行一样)。确保在需要的地方加上分号,否则你会发现你不能正确地缩小你的脚本和/或你会遇到一些浪费你时间的奇怪错误。 :-)
【讨论】:
+1,也是主题 #1:不要使用for ... in
来遍历数组。 (你的代码是这么说的,但我想我只是用文字添加)
@casablanca:哈哈,我刚刚看到他正在使用它,并按照您的评论添加它。 :-) 如果您了解自己在做什么并正确处理它,那很好,但大多数人不了解他们在做什么并且不处理它财产,所以...
@Carlos:你可以做imgArray[1][3]
。 imgArray[1]
返回一个数组,imgArray[1][3]
访问该数组的第四个元素。
@Felix:是的,你可以,好点。虽然问题是关于循环的,但我不会在循环中这样做,因为在遍历数组内容时重复查找数组 (imgArray[1]
) 是很浪费的(这就是我上面有 entry
变量的原因)。尽管如此,当你不循环时,没有理由不能这样做。
@TJCrowder:我完全同意你的看法。【参考方案2】:
这不是“增强的for
循环”。无论如何,您不应该以这种方式遍历 Array 实例,至少当您在语义上将它们视为整数索引数组时不会。
使用您的原件
for (var i = 0; i < 4; ++i)
方法(并且不要忘记var
)。也别理会
var ImgArray = new Array(4);
随便写
var ImgArray = [];
【讨论】:
【参考方案3】:你只需要为这两者做一个 for 循环
for (var i in array)
for(var j in array[i])//do stuff here
【讨论】:
请谨慎使用hasOwnProperty
以上是关于二维数组中的增强 for 循环 - JavaScript的主要内容,如果未能解决你的问题,请参考以下文章
java中何用for循环将一个二维数组的值付给另外一个二维数组