在Javascript中同时迭代两个数组

5

我希望同时遍历两个数组,因为数组A中任何给定索引i的值都对应于数组B中的值。

目前我正在使用这段代码,但是当我调用alert(queryPredicates[i])alert(queryObjects[i])时会得到undefined
我知道我的数组已经被填充了,因为在调用之前我打印了出来。

//queryPredicates[] and queryObjects[] are defined above as global vars - not in a particular function, and I have checked that they contain the correct information.

function getObjectCount(){
    var variables = queryPredicates.length; //the number of variables is found by the length of the arrays - they should both be of the same length
    var queryString="count="+variables;
    for(var i=1; i<=variables;i++){
        alert(queryPredicates[i]);
        alert(queryObjects[i]); 
    }

我想问的是,我这样做对吗?如果上面的代码看起来正确,我认为它是正确的,那么这意味着我有其他问题。 - Ankur
顺便说一下,Firebug 没有检测到任何错误。 - Ankur
queryPredicates 是否具有数字索引? - bschaeffer
尝试在循环中警告实际的数组(例如 alert(queryPredicates);alert(queryObjects);),看看那会给你什么提示。 - Steve Harrison
在循环中警报数组会给出正确的答案,即已被点击并推入数组中的数字,因此似乎只是要获取正确的值。我将尝试不使用数值索引来完成这个任务。 - Ankur
显示剩余3条评论
3个回答

10
任何数组的length属性的值,都是元素的实际数量(更精确地说是最大的存在索引加上一)。
如果您尝试访问此索引,由于它超出了数组的边界,因此将始终返回undefined(这在您的循环的最后一次迭代中发生,因为条件<=variables)。
在JavaScript中,索引从0length - 1进行处理。
除此之外,请确保您的两个数组具有相同的元素数量。

谢谢,我之所以从1开始是因为我之前遇到了一个不同的问题,不知怎么地认为JS数组从1开始......非常感谢您指出这个问题。然后我只是简单地认为我做对了这部分。 - Ankur
我简直不敢相信我没想到这个!幸运的是这里有一些人在正确地思考!;) - Steve Harrison

3
如果queryPredicates没有数字索引,如0、1、2等,则尝试在第一个项目的索引为queryPredicates['some_index']时警报值queryPredicates[0]将不会警报任何内容。请改用for循环:
stuff['my_index'] = "some_value";

for (var i in stuff)
{
    // will alert "my_index"
    alert(i);

    // will alert "some_value"
    alert(stuff[i]);
}

是的,谢谢,我确实理解了,我的问题是尝试在单个循环中复制同时迭代两个数组,当我不使用数字索引时。我认为这可能只是尝试 - Ankur

2

JS中的数组是从0开始索引的。Length属性代表实际元素个数。你的循环超出了数组的范围。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接