js - 循环遍历多维数组

时间:2014-03-11 09:27:55

标签: javascript arrays loops

我试图在for循环中实现jquery热键。

acKey = [
    ["keydown", "alt+d", open],
    ["keydown", "alt+a", close],
    ["keydown", "alt+s", max],
];
for(i=0;i<=acKey.length;i++)
{
    $(document).bind(acKey[i][0], acKey[i][1], acKey[i][2]);
}

然而,事实证明错误未捕获的TypeError:无法读取属性&#39; 0&#39;未定义。我的代码出了什么问题?

2 个答案:

答案 0 :(得分:4)

对@Matt给予应有的评价,他的评论指出了它。

循环数组的最常用格式是:

 for(var i=0; i<array.length; i++) {
     doSomethingWith(array[i];
 }

请注意,&#34;小于&#34;小于&#34;操作员,而不是&#34;小于或等于&#34;操作

此循环从0到array.length - 1计数,因为for语句的第二部分:i < array.length,表示&#34;只要i小于数组,就会继续重复。长度。

...那就是你想要的,因为数组的编号从0到长度为1。也就是说,长度为4的数组编号为0,1,2,3。

如果你在i <= 4循环,那么循环将为0,1,2,3,4执行 - 并且在Javascript中,当它引用undefined时它将获得array[4]

有时你确实需要&#34;&lt; =&#34;在for循环中,但它非常例外。每次使用&#34;&lt; =&#34;时,请考虑添加评论以说明原因。

答案 1 :(得分:1)

当i = acKey.length。

时,你的问题是你的索引(越界)

您可以使用i&lt; acKey.lenght或实现“for each”迭代以避免混淆:

acKey = [
    ["keydown", "alt+d", open],
    ["keydown", "alt+a", close],
    ["keydown", "alt+s", max],
];

var sub;
for(i in acKey) {
    sub = acKey[i];
    $(document).bind(sub[0], sub[1], sub[2]);
}