0

我原本打算问一个问题,为什么它不起作用。但是当我评论代码时,我意识到我可以访问文本数组样式并item给我索引。我花了一段时间才找到这个解决方案,但是我宁愿item.text在 for 循环中使用它。这是 [我发布的答案] 在 Javascript 中循环遍历 JSON 对象的有效方法吗?

4

2 回答 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 回答