我原本打算问一个问题,为什么它不起作用。但是当我评论代码时,我意识到我可以访问文本数组样式并item
给我索引。我花了一段时间才找到这个解决方案,但是我宁愿item.text
在 for 循环中使用它。这是 [我发布的答案] 在 Javascript 中循环遍历 JSON 对象的有效方法吗?
问问题
3015 次
2 回答
2
没有 JSON 对象之类的东西——一旦你解析了你的 JSON(它是一个字符串),你最终会得到一个简单的对象。或者一个数组。
无论如何,要遍历一组对象,请使用传统的for
循环。循环可能会起作用,但不推荐使用for..in
,因为它可能会遍历非数字属性(如果有人一直在弄乱内置数组)。
在您的特定情况下,如果obj.body.items
是一个数组,则执行以下操作:
for (var i = 0; i < obj.body.items.length; i++) {
// obj.body.items[i] is current item
console.log(obj.body.items[i].text);
}
obj.body.
可以说,您还可以通过直接保持对数组的引用而不是每次都通过整个链访问它来使代码更整洁:
var items = obj.body.items;
for (var i = 0; i < items.length; i++) {
console.log(items[i].text);
}
“我宁愿
item.text
在 for 循环中使用”
在您的回答中-确实应该作为问题的一部分发布-因为您正在使用for..in
循环,因此您的item
变量被依次设置为每个索引作为字符串,例如,在第一次迭代时,它将是 string "0"
,并且字符串没有text
属性,因此item.text
不起作用-尽管它应该给您undefined
,而不是null
. 但是你可以这样做:
var item;
for (var i = 0; i < obj.body.items.length; i++) {
item = obj.body.items[i] // get current item
console.log(item.text); // use current item
}
也就是说,item
在每次循环迭代开始时声明一个您设置为引用当前数组项的变量。
于 2013-01-28T05:57:58.463 回答
0
<script type="text/javascript">
...
obj = JSON.parse(xmlhttp.responseText);
// displays the object as expected
console.log(obj);
// display the string next as expected
console.log(obj.body.next);
// displays the text of the item as expected
console.log(obj.body.items[0].text);
for (var item in obj.body.items) {
// displays the index value of the item
console.log(item);
// displays null - WHAT?? HUH?
console.log(item.text);
// displays the text - finally
console.log(obj.body.items[item].text);
}
<script>
于 2013-01-28T05:43:30.783 回答