在Javascript中一次迭代两个数组

时间:2010-05-09 04:16:59

标签: javascript arrays iteration

我想同时迭代两个数组,因为数组A中任何给定索引i的值对应于数组B中的值。

我目前正在使用此代码,并在致电undefinedalert(queryPredicates[i])时收到alert(queryObjects[i])
 我知道我的数组已填充,因为我在调用之前打印出数组。

//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]); 
    }

3 个答案:

答案 0 :(得分:10)

任何数组的length属性的值,是元素的实际数量(更确切地说,是现有最大的索引加上一个)。

如果您尝试访问此索引,它将始终为undefined,因为它超出了数组的范围(这发生在循环的最后一次迭代中,因为i<=variables条件)

在JavaScript中,索引从0处理到length - 1

除此之外,请确保您的两个数组具有相同数量的元素。

答案 1 :(得分:3)

如果queryPredicates没有数字索引,例如0,1,2等,那么当第一个项目的索引为queryPredicates[0]时,尝试提醒值queryPredicates['some_index']什么都不警告。

请尝试使用for循环:

stuff['my_index'] = "some_value";

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

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

答案 2 :(得分:2)

JS中的数组是基于零的。长度是实际数量。你的循环超出了数组的范围。