2012-02-24 52 views
5

可能重复:
Loop through Json object环通对象在Javascript

{"data":[{"name":"Jen","id":"1"},{"name":"Steve","id":"8"}]} 

我与上述响应交互的服务器。

我试图循环For..in语句。

这就是我想要做的事:

for (var item in response.data) 
{ 
console.log(item.name); 
} 

这是行不通的。 出了什么问题?

谢谢

我得到了它与阅读评论后,下面的工作:

的(在response.data VAR项){ 的console.log(response.data [项目]。名称); }} )

我能得到的名单...

有人可以对响应进行分析,为什么它的工作?

+0

你确定这是JavaScript而不是JSON? – 2012-02-24 01:52:30

+0

不适合的重复。这是与链接结构不同的对象结构。 – 2012-02-24 01:53:32

+1

不是这个问题的重复!他正在循环阵列! – hugomg 2012-02-24 01:54:18

回答

0

退房:Why is using "for...in" with array iteration a bad idea?

对于...在遍历对象属性的名称。数组项也被认为是“属性”,所以for..in遍历索引(在你的情况下是0,1)。按照预期,当您使用response.data [0]时,您将获得数组的第一个元素。

+0

谢谢!你回答了我的问题! – 2012-02-24 03:37:19

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循环,通常使用。

+0

我能够得到上述格式的工作。我只是好奇如何与For..in做到但谢谢!这证实了我 – 2012-02-24 01:56:14

0

for..in以无特定顺序遍历对象的枚举属性(您可能会在不同的浏览器中获得不同的顺序)。数组只是一个具有特殊长度方法的简单对象,以及从Array.prototype继承的方便方法(其中一些依赖于特殊的length属性)。对于可以用于属性名称的内容没有限制,它们不限于非负整数(注意,在正确名称不是有效标识符的情况下,必须使用方括号表示来访问其值)。

数组的索引是只是串属性名称(即,它们只是简单对象属性名称),这些非负整数,所以for..in循环将遍历数字索引(再次,不一定以升序或降序订单)以及所有其他可枚举的属性,包括那些在[[Prototype]]。因此,除非要包含继承的可枚举属性,否则总是建议包含hasOwnProperty测试for..in

由于上述原因,使用从0array.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);