查找json樹中的父節點,動態屬性名

let tree = [
    {
        "authId": "12",
        "authType": "2",
        "authName": "首頁",
        "authDescribe": "首頁",
        "authStatus": "0",
        "authPid": "0",
        "authUrl": "www.index.html",
        "authOrder": 1,
        "childAuth": [
            {
                "authId": "1201",
                "authType": "2",
                "authName": "測試",
                "authDescribe": "測試",
                "authStatus": "0",
                "authPid": "12",
                "authOrder": 0,
                "childAuth":[]
            }
        ],
        "hasChild": true
    }
];
console.log(tree)

let parentNode = null;
let node = null;
function getParentNode(json, nodeId,idName,childName) { 
        //1.第一層 root 深度遍歷整個JSON
        for (var i = 0; i < json.length; i++) {
            if (node) {
                break;
            }
            var obj = json[i];
            //沒有就下一個
            if (!obj || !obj[idName]) {
                continue;
            }

            //2.有節點就開始找,一直遞歸下去
            if (obj.authId == nodeId) {
                //找到了與nodeId匹配的節點,結束遞歸
                node = obj;
                break;
            } else {
                //3.如果有子節點就開始找
                if (obj[childName]) {
                    //4.遞歸前,記錄當前節點,作爲parent 父親
                    parentNode = obj;
                    //遞歸往下找
                    getParentNode(obj[childName], nodeId,idName,childName);
                } else {
                    //跳出當前遞歸,返回上層遞歸
                    continue;
                }
            }
        }

        //5.如果木有找到父節點,置爲null,因爲沒有父親  
        if (!node) {
            parentNode = null;
        }

        //6.返回結果obj
        return {
            parentNode: parentNode,
            node: node
        };
}

let pNode = getParentNode(tree,"1201","authId","childAuth");
console.log(pNode)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章