1
我正在尝试编写代码来读取嵌套的JSON并打印项目。后来我打算从这里生成一个菜单。Javascript递归函数不工作
的JSON内容如下:
{
"label": "Root of Menu",
"child": [
{
"label": "Menu 1",
"child": [
{
"label": "Menu 1.1",
"child": [
{
"label": "Menu 1.1.1"
},
{
"label": "Menu 1.1.2"
}
]
},
{
"label": "Menu 1.2",
"child": [
{
"label": "Menu 1.2.1"
},
{
"label": "Menu 1.2.2"
}
]
},
{
"label": "Menu 1.3",
"child": [
{
"label": "Menu 1.3.1"
},
{
"label": "Menu 1.3.2"
}
]
}
]
},
{
"label": "Menu 2",
"child": [
{
"label": "Menu 2.1"
},
{
"label": "Menu 2.2"
}
]
},
{
"label": "Menu 3",
"child":
{
"label": "Menu 3.1"
}
}
]
}
我使用以下递归函数:
function menuize(m) {
if (m instanceof Array) {
for(i = 0; i < m.length; i++) {
for(p in m[i]) {
menuize(m[i][p]);
}
}
} else if (m instanceof Object) {
for(p in m) {
menuize (m[p]);
}
} else {
console.log('Label: ' + m);
}
}
的menuize(m)
呼叫与m
被评估的JSON对象使用JSON.parse(XHR.responseText)
其中XHR是开始用于检索数据的对象XMLHttpRequest
。我已经看到数据被完全读取,所以这不是问题。
现在,会发生什么情况是该函数的工作原理是正确的,它可以很好地工作,直到它到达最内层child
但在此之后,它不会恢复到正确打印其他项目上一级上。
产生将帮助您了解正在发生的事情的输出:
t: Root of Menu
t: Menu 1
t: Menu 1.1
t: Menu 1.1.1
t: Menu 1.1.2
我不明白究竟发生了,为什么不应该的物品,如Menu 1.2
,Menu 2
(这是比较在上水平)被打印。
有人请善良提供一些见解,并帮助我理解? 谢谢!
非常感谢!有用!简直不敢相信我错过了! – abhishekcghosh