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