【发布时间】:2014-04-03 05:39:30
【问题描述】:
我正在尝试编写代码来读取嵌套的 JSON 并打印项目。稍后我计划从中生成一个菜单。
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.parse(XHR.responseText) 评估的 JSON 对象,其中 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(相对较高级别)之类的项目。
有人可以提供一些见解并帮助我理解吗? 谢谢!
【问题讨论】:
标签: javascript ajax json recursion nested