在Javascript中迭代数组集合

在Javascript中迭代数组集合,javascript,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]]; 迭代数组 fo

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

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

不要使用
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]);
}
(变量i=0;i)的

例如,如果仅定义了一个数组项,如
myArr[3],则在数组上使用
for in
构造可能会产生与增量循环截然不同的结果=123;
。在这种情况下,JavaScript将分配项目0-2,for循环将迭代这些项目,但In
中的
不会。更重要的是,外部脚本和框架可能会扩展数组原型,并添加属性,当您真正需要数组元素时,这些属性将突然包含在In
迭代器的
中你应该这样做

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

对于(i=0;i使用
console.log
而不是alert,alert将只显示[Object],如果变量是一个对象,但在console中,您可以看到什么类型的对象,并且可以进一步调试

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

您的问题是该项是数组的键

试试这个:

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

这是一个针对
循环的优化的
,我将长度存储在这里,这样它就不会在每次迭代时进行计算:

 for (var i = 0, l = ageGroups.length; i < l; i++){
    alert(ageGroups[i][0]);
    alert(ageGroups[i][1]);  
    alert(ageGroups[i][2]);      
 }
for(变量i=0,l=ageGroups.length;i
要使其与您的示例完全相同,您可以将年龄组的迭代存储在一个变量中:

for (var i = 0, l = ageGroups.length, item; i < l; i++){
    item = ageGroups[i];  
    alert(item[0]);
    alert(item[1]);
    alert(item[2]);
}
for(变量i=0,l=ageGroups.length,item;i
使用该死的!:-)但不要跨浏览器,但垫片很容易实现

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

无论如何,您需要知道的是for-in循环以字符串形式返回项,即循环正在查找的当前属性的名称,而不是对象或数组,因此因为in不是可以在其他语言中找到的foreach,所以ES5中有一个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])
}