[英]Javascript recursive function not working
我正在嘗試編寫代碼以讀取嵌套的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
為開始,其中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
類的項目(相對來說在上層)。
請問有人能提供一些見解並幫助我理解嗎? 謝謝!
您的迭代變量需要使用var
聲明,因此它們將是局部變量。 否則,當您遞歸時,您將覆蓋調用方中使用的變量。
function menuize(m) {
var i, p;
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.