2

我在迭代和获取数组集合中的值时遇到问题(我猜是数组数组)

我希望下面的代码会显示一个警报,依次显示每个数组的 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]);
}
4

7 回答 7

4

使用console.log而不是警报,警报将仅显示 [Object ],如果变量是对象但在控制台中您可以看到什么样的对象,您可以进一步调试

for (var item in ageGroups) { 
    console.log(ageGroups[item][0]); 
    console.log(ageGroups[item][1]); 
    console.log(ageGroups[item][2]); 
}
于 2012-04-04T12:35:06.120 回答
1
for (var item in ageGroups) {
    alert(ageGroups[item][0]);
    alert(ageGroups[item][1]);
    alert(ageGroups[item][2]);
}
于 2012-04-04T12:35:22.633 回答
1

你的问题是那个项目是你数组的关键

试试这个:

for (var item in ageGroups) {
    alert(ageGroups[item][0]);
    alert(ageGroups[item][1]);
    alert(ageGroups[item][2]);
}
于 2012-04-04T12:35:46.403 回答
1

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

// 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])
}
于 2012-04-04T12:46:50.693 回答
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]);
}

看到它在行动...

例如,如果您只定义for-in了一个数组项,如myArr[3] = 123;. 在这种情况下,JavaScript 将分配项目 0-2,for 循环将迭代它们,但for-in不会。for-in更重要的是,外部脚本和框架可能会扩展 Array 原型并添加属性,当您真的只需要数组元素时,这些属性会突然包含在您的迭代器中。

于 2012-04-04T12:34:07.533 回答
0

你应该做

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

for..in在javascript中用于迭代对象的属性

于 2012-04-04T12:34:25.840 回答
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]);
}
于 2012-04-04T12:40:03.740 回答