Javascript:如何为两个数组运行一个`for`?

时间:2010-09-24 23:04:47

标签: javascript arrays

我有:

var array1 = [];
var array2 = [];

array1包含12

array2包含34

我想这样做:

for(var a in array1){
    for(var b in array2){
         doSomething(array1[a],array2[b]);
    }
}

但问题是函数doSomething()因为两个for而对每个数组运行两次。

如何只运行一次但是使用所有数组?

修改

数字不是按升序排列的!在我的真实项目中,ID是任何顺序的任何数字。

6 个答案:

答案 0 :(得分:3)

您不应该使用for..in来循环遍历数组。使用索引变量:

for (var i = 0, len = array1.length; i < len; i++) {
    doSomething(array1[i], array2[i]);
}

这当然假设它们的长度相同。

答案 1 :(得分:1)

认为这就是你所追求的:

for(var i=0; i<array1.length; i++){
  doSomething(array1[i],array2[i]);
}

这循环遍历两个数组,使用第一个作为长度,并在每个doSomething()调用中将元素放在相同的索引处。

答案 2 :(得分:1)

如果您确定两个阵列的长度完全相同,则可以执行以下操作:

for (var i = 0; i < array1.length; i++) {
    doSomething(array1[i], array2[i]);
}

答案 3 :(得分:1)

看起来你想要将两个数组连接在一起。使用concat()函数:

var jointArray = array1.concat(array2);
for(var i=0; i < jointArray.length; i++) {
 doSomething(jointArray[i]);
}

请参阅:

http://www.w3schools.com/jsref/jsref_concat_array.asp

答案 4 :(得分:1)

这个if数组长度不一样

for (var i = 0, i < (array1.length <= array2.length ? array1.length : array2.length); i++) {
    doSomething(array1[i], array2[i]);
}

答案 5 :(得分:1)

DoSomething将运行4次。如果你想让它只运行两个列表中的值,请删除第二个for循环并用Do中替换DoSomething中的b。