可能重复:
Loop through Json object
{
"data": [
{
"name": "Jen",
"id": "1"
},
{
"name": "Steve",
"id": "8"
}
]
}
我正在与之交互的服务器以上述方式作出响应。
我正在尝试循环使用enter code here
for For..in语句。
这就是我要做的事情:
for (var item in response.data) {
console.log(item.name);
}
这不起作用。 出了什么问题?
谢谢
我在阅读评论后,我可以使用以下内容:
for (var item in response.data) {
console.log(response.data[item].name);
}
我能够得到一份名单......
有人可以剖析有关其工作原理的回复吗?
答案 0 :(得分:10)
data
实际上是一个数组(由[]
表示),而不是一个对象,因此您需要一个常规for
循环而不是for in
。
for (var i = 0; i<response.data.length; i++) {
// use i as an array index
console.log(response.data[i].name);
}
在JavaScript中,for in
构造用于迭代对象属性,但是为了迭代数组,通常使用增量for循环。
答案 1 :(得分:0)
for..in
以无特定顺序迭代对象的可枚举属性(您可能在不同的浏览器中获得不同的顺序)。数组只是一个普通对象,具有特殊长度方法和从Array.prototype继承的方便方法(其中一些取决于特殊长度属性)。对于可以用于属性名称的内容没有限制,它们不限于非负整数(注意,如果正确的名称不是有效的标识符,则必须使用方括号表示法来访问其值)。
数组的索引只是字符串属性名称(即它们只是普通对象属性名称),它们是非负整数,因此for..in
循环将遍历数字索引(同样,不一定在升序或降序)以及所有其他可枚举属性,包括 [[Prototype]]
链上的属性。因此,除非您希望包含继承的可枚举属性,否则始终建议在for..in
中包含 hasOwnProperty 测试。
由于上述原因,使用从0
到array.length - 1
的计数器迭代数组属性通常要好得多(因为长度总是比最后一个索引大一个)。
要测试“无特定顺序”语句,请在IE和其他浏览器中尝试以下操作,并注意不同的顺序:
var a = [];
a[2] = 2;
a[0] = 0;
a[3] = 3;
var b = [];
for (var i in a) b.push(a[i]);
alert(b);
答案 2 :(得分:0)
退房:Why is using "for...in" with array iteration a bad idea?
For ... in迭代对象属性的名称。数组项也被视为“属性”,因此for..in迭代索引(在您的情况下为0,1)。正如您在使用response.data [0]时所预期的那样,您将获得数组的第一个元素。