簡體   English   中英

Javascript遞歸功能不起作用

[英]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.2Menu 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM