在Javascript中循环遍历JSON数据的问题

时间:2016-09-14 14:43:29

标签: javascript arrays json

我的JSON数据:

var menu = {"parent":[
{
  "id": 1,
  "name": "Information",
  "child": [
    {
      "id": 1000,
      "name": "Example"
    }
  ]
}, 
{
  "id": 2,
  "name": "Something"
},  
{
  "id": 3,
  "name": "Something else",
  "child": [
    {
      "id": 2000,
      "name": "Yay"
    }
  ]
}

我的JavaScript:

$(document).ready(function () {


var xhr = new XMLHttpRequest();

xhr.open("GET", "https://sable-belief-1704.justapis.io/parentmenu", false);
xhr.send();

var responseJson = JSON.parse(xhr.response);
var responseParent = responseJson.parent;

for(var i in responseParent) {

    if (responseParent[i].hasOwnProperty('child'))
    {
        console.log(responseParent[i]);
        console.log(responseParent[i].child[i]);
    }
}
});

我被困在这里。此代码适用于具有子对象的第一个对象。但是当它循环到具有子对象的第二个对象时,它将运行第一个console.log并且我可以看到我的父对象上有子对象,但由于一些奇怪的原因,在第二个console.log上我在哪里#39;我试图记录子对象,它只会返回undefined。当我记录父对象时,考虑到子对象存在,这对我来说似乎很奇怪。

这是一个JSFiddle,您可以运行以查看我的意思:https://jsfiddle.net/4rcy66r7/

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

此:

    console.log(responseParent[i]);
    console.log(responseParent[i].child[i]);
                                       ^^^

您对两个完全独立的数组使用相同的索引。所有这些child数组中只包含 ONE 对象,始终位于索引0,但您正在尝试索引[1],[2],[3],等......根本就不存在。

应该是

    console.log(responseParent[i].child[0]);
                                        ^---

代替。