[英]js - loop through multidimensional array
我正在尝试在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]);
}
但是,结果是出现错误Uncaught TypeError:无法读取undefined的属性“ 0” 。 我的代码有什么问题?
由于对@Matt表示感谢,他的评论指出了这一点。
遍历数组的最常见格式是:
for(var i=0; i<array.length; i++) {
doSomethingWith(array[i];
}
请注意,这是一个“小于”运算符,而不是“小于或等于”运算符。
此循环从0到array.length - 1
计数,因为for
语句的第二部分: i < array.length
,意味着“只要i < array.length
,就一直重复。
...这就是您想要的,因为数组的编号从0到length-1。 也就是说,长度为4的数组编号为0、1、2、3。
如果在i <= 4
循环,则循环将执行0、1、2、3、4 -在Javascript中,当引用array[4]
时,它将变得undefined
。
有时在for循环中确实需要“ <=”,但这是非常例外。 每当您使用“ <=”时,请考虑添加注释以说明原因。
您的问题是当i = acKey.length时索引(越界)。
您可以使用i <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]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.