2012-04-04 82 views
2
阵列收集

我遇到麻烦迭代和数组的集合(数组的数组,我猜)迭代在Javascript

我希望下面的代码会显示一个警告的表现中得到的值依次在每个阵列的3个值(例如,“婴儿”,“0”,然后选择“2”),但该警报只是显示为“0”,“不确定”,不确定的”。

我缺少什么?

声明该阵列:

var ageGroups = [["infant", 0, 2], ["child", 3, 18], ["child", 3, 17], ["adult1", 18, 64], ["adult2", 65, 74], ["adult3", 75, 79]]; 

遍历数组

for (var item in ageGroups) { 
    alert(item[0]); 
    alert(item[1]); 
    alert(item[2]); 
} 
+0

反正你需要知道什么是对环回报项目作为字符串,当前属性的名称环路仰视,不是一个对象或数组,所以在不是一个foreach你可以在其他语言中找到,在ES5中有一个forEach函数,虽然 – mpm 2012-04-04 13:07:51

回答

4

代替警报使用console.log的性能,警报将只显示[对象],如果变量是一个对象但在控制台你可以看到什么样的对象,你可以调试进一步

for (var item in ageGroups) { 
    console.log(ageGroups[item][0]); 
    console.log(ageGroups[item][1]); 
    console.log(ageGroups[item][2]); 
} 
+0

感谢Sandeep。从来没有想过使用console.log – BrightonDev 2012-04-11 08:06:00

0

不要使用for in来遍历数组中的JavaScript。其目的是遍历对象属性。代替使用一个增量for循环..

for (var i=0; i<ageGroups.length; i++) { 
    for (var j=0; j<ageGroups[i].length; j++) { 
    console.log(ageGroups[i][j]); 
    } 

    // Or instead of an inner loop access them individually 
    console.log(ageGroups[i][0]); 
    console.log(ageGroups[i][1]); 
    console.log(ageGroups[i][2]); 
} 

See it in action...

使用一个阵列上的for-in构建体可产生如果,例如,你喜欢myArr[3] = 123;只定义了一个数组项比增量环路大大不同的结果。在这种情况下,JavaScript将分配项目0-2,for循环会迭代它们,但for-in不会。更重要的是,外部脚本和框架可能会扩展Array原型,并添加属性,当你真的想要数组元素时,它将突然包含在迭代器中。

0

你应该做

for (i = 0; i <ageGroups.length; i++) { 
    var item = ageGroups[i]; 
    alert(item[0]); 
    alert(item[1]); 
    alert(item[2]); 
} 

for..in在JavaScript中,用于遍历对象

1
for (var item in ageGroups) { 
    alert(ageGroups[item][0]); 
    alert(ageGroups[item][1]); 
    alert(ageGroups[item][2]); 
} 
1

你porblem是产品的阵列的

关键试试这个:

for (var item in ageGroups) { 
    alert(ageGroups[item][0]); 
    alert(ageGroups[item][1]); 
    alert(ageGroups[item][2]); 
} 
0

这里有一个优化的for循环,我存储长度这里,所以它不会在每次迭代计算:

for (var i = 0, l = ageGroups.length; i < l; i++){ 
    alert(ageGroups[i][0]); 
    alert(ageGroups[i][1]); 
    alert(ageGroups[i][2]);  
} 

,使其完全一样的例子中,你可以存储ageGroup的迭代中的变量:

for (var i = 0, l = ageGroups.length, item; i < l; i++){ 
    item = ageGroups[i]; 
    alert(item[0]); 
    alert(item[1]); 
    alert(item[2]); 
} 
1

使用该死的forEach! :-)虽然不是跨浏览器,但垫片很容易实现。

// Call forEach and define the callback function 
ageGroups.forEach(loopArray) 

// Now let's work with the array! 
function loopArray(ageGroup) { 
    console.log(ageGroup[0]) 
    console.log(ageGroup[1]) 
    console.log(ageGroup[2]) 
}