在Javascript中循环对象

可能重复:
循环浏览Json对象

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

我正在与之交互的服务器使用上述方式进行响应。

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

这就是我想要做的:

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

这不起作用。 什么地方出了错?

谢谢

在阅读评论后,我已经拿到了以下内容:

for(var response.data中的项目){console.log(response.data [item] .name); }})

我能够得到一个名单列表...

有人可以解析为什么它的工作原理?


检查:为什么在数组迭代中使用“for ... in”是一个坏主意?

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


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循环。


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

数组的索引只是字符串属性名称(即它们只是普通的对象属性名称),它们是非负整数,因此for..in循环将迭代数字索引(再次,不一定按升序或降序) 以及所有其他枚举属性,包括 [[Prototype]] 上的属性 。 因此,除非要包含继承的可枚举属性,否则总是建议使用for..in包含hasOwnProperty测试。

由于上述原因,使用从0array.length - 1的计数器遍历数组属性通常要好得多(因为长度总是比最后一个索引大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);
链接地址: http://www.djcxy.com/p/28827.html

上一篇: Loop Through Object in Javascript

下一篇: How do I iterate over a JSON array using jQuery/AJAX call from PHP?