Javascript 如何循环遍历一组对象?

Javascript 如何循环遍历一组对象?,javascript,Javascript,如何在对象数组中循环 users = new Array() users.push({id: "5", name: "solomom"}); users.push({id: "3", name: "jonathan"}); for(u in users){ alert(u.name); } 这提醒我未定义,我做错了什么吗? 我真的是javascript的新手。你应该使用一个常规的for循环来循环数组。for in循环迭代对象的可枚举属性。JavaScript中的数组在技术上是一个对象,

如何在对象数组中循环

users = new Array()
users.push({id: "5", name: "solomom"});
users.push({id: "3", name: "jonathan"});
for(u in users){
    alert(u.name);
}
这提醒我未定义,我做错了什么吗?
我真的是javascript的新手。

你应该使用一个常规的for循环来循环数组。for in循环迭代对象的可枚举属性。JavaScript中的数组在技术上是一个对象,这就是问题的根源

for (var i = 0; i < users.length; ++i)
{
    alert( users[i].name );
}
for(变量i=0;i
您应该使用常规for循环来循环数组。for in循环迭代对象的可枚举属性。JavaScript中的数组在技术上是一个对象,这就是问题的根源

for (var i = 0; i < users.length; ++i)
{
    alert( users[i].name );
}
for(变量i=0;i
将其更改为:

alert(users[u].name);
将使其警告预期值,因为循环迭代对象的键,但是不应使用
for in
循环迭代Javascript中的数组

而是使用常规for循环:

for(var i = 0; i < users.length; i++){
    alert(users[i].name);
}
for(var i=0;i
您还应该养成使用
console.log
进行调试的习惯,而不是使用
alert
。当您需要调试时,它将使调试更加容易。

将其更改为:

alert(users[u].name);
将使其警告预期值,因为循环迭代对象的键,但是不应使用
for in
循环迭代Javascript中的数组

而是使用常规for循环:

for(var i = 0; i < users.length; i++){
    alert(users[i].name);
}
for(var i=0;i

您还应该养成使用
console.log
进行调试的习惯,而不是使用
alert
。当您需要时,它将使调试更加容易。

A
for..in
循环将每个键分配给
u
,而不是每个值。您需要执行类似于
警报(用户[u].name)

也就是说,不要在数组上使用
for..in
(除非是稀疏的)。相反,请执行以下操作:

for( i=0, l=users.length; i<l; i++) {
    alert(users[i].name);
}

for(i=0,l=users.length;iA
for..in
循环将每个键分配给
u
,而不是每个值。您需要执行类似于
警报(用户[u].name)

也就是说,不要在数组上使用
for..in
(除非它是稀疏的)。相反,请执行以下操作:

for( i=0, l=users.length; i<l; i++) {
    alert(users[i].name);
}
for(i=0,l=users.length;i

语法

for (variable of object)
  statement
参数

  • 变量
    -在每次迭代中,为变量分配不同属性的值
  • 对象
    -其可枚举属性被迭代的对象
这在大多数现代浏览器中都不受支持


您可能希望使用
数组。
来完成您想要完成的任务

users.forEach(function(u) {
    alert(u.name);
});
你在想什么

语法

for (variable of object)
  statement
参数

  • 变量
    -在每次迭代中,为变量分配不同属性的值
  • 对象
    -其可枚举属性被迭代的对象
这在大多数现代浏览器中都不受支持


您可能希望使用
数组。
来完成您想要完成的任务

users.forEach(function(u) {
    alert(u.name);
});

试着做
console.log(u)
试着做
console.log(u)
你能详细解释一下为什么
for..in
是一种不好的做法吗?@Wex:这有很好的信息:尤其是在用户中为(u)做
时{
;每次执行循环时,
u
将填充对象上存在的另一个属性的名称,直到返回所有属性。返回的属性既包括对象实例上存在的属性,也包括通过原型链继承的属性。包括原型链中的对象可能导致未执行预期的结果。@Wex:另请参见。
说明
部分的底部有一条注释,说明为什么for..in不应用于迭代索引顺序很重要的数组。您能否详细说明为什么
for..in
是一种不好的做法?@Wex:这有很好的信息:尤其是在执行
for(u in用户)时{
;每次执行循环时,
u
将填充对象上存在的另一个属性的名称,直到返回所有属性。返回的属性既包括对象实例上存在的属性,也包括通过原型链继承的属性。包括原型链中的对象可能导致未执行预期结果。@Wex:另请参见。
说明
部分的底部有一条注释,说明为什么不应使用for..in来迭代索引顺序很重要的数组。