在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java  HTML/ js json對(duì)象從子級(jí)找最外層父級(jí)怎么找,有方法嗎

js json對(duì)象從子級(jí)找最外層父級(jí)怎么找,有方法嗎

父級(jí)找子集直接點(diǎn)就行了,子集找父級(jí)呢?怎么操作

let arrn=[
        {
            "MENU_URL": "dashboard",
            "MENU_ID": "104a580029c54e139210b7e87dca6d89",
            "MENU_NAME": "監(jiān)控面板"
        },
        {
            "MENU_URL": "systemManage",
            "MENU_ID": "769130d1918d47219e6f0c463a1c9c67",
            "MENU_NAME": "系統(tǒng)管理"
        },
        {
            "MENU_URL": "serviceManage",
            "MENU_ID": "8619ca0b6fbc42649a27475e339d5d4a",
            "MENU_INFO": [
                {
                    "MENU_URL": "userInfo",
                    "MENU_ID": "104a580029c54e139210b7e87dca6d89",
                    "MENU_NAME": "三戶(hù)信息"
                }
            ],
            "MENU_NAME": "業(yè)務(wù)管理"
        },
        {
            "MENU_URL": "serviceManage/recordQuery",
            "MENU_ID": "d379e3f38cb3472ab18287034f32ef46",
            "MENU_INFO": [
                {
                    "MENU_URL": "dashboard",
                    "MENU_ID": "104a580029c54e139210b7e87dca6d80",
                    "MENU_INFO": [
                        {
                            "MENU_URL": "dashboard",
                            "MENU_ID": "454a580029c54e139210b7e87dca6d82",
                            "MENU_NAME": "監(jiān)控面板222"
                        }
                    ],
                    "MENU_NAME": "監(jiān)控面板111"
                },
                {
                    "MENU_URL": "dashboard",
                    "MENU_ID": "104a580029c54e139210b7e87dca6d89",
                    "MENU_NAME": "監(jiān)控面板333"
                }
            ],
            "MENU_NAME": "訂購(gòu)信息查詢(xún)"
        }
    ]
知道監(jiān)控面板222的MENU_ID,要找到最外層的MENU_ID


現(xiàn)在寫(xiě)了一個(gè)能從第二級(jí)找到第一級(jí)
```
function getParentId(childId) {
    tmparr.forEach(function (item, index) {
        if (item.MENU_INFO) {
            item.MENU_INFO.forEach(function (list, idx) {
                if (list.MENU_ID === childId) {
                    console.log('d', item)
                }
            })
        }
    })
}
getParentId('104a580029c54e139210b7e87dca6d80')
```
有沒(méi)有高手可以改造一下,用遞歸什么的,查不定級(jí)數(shù)的
回答
編輯回答
玩控

你怎么拿到子集的?子集去掉點(diǎn)后面的不就是父級(jí)。

2018年4月17日 22:35
編輯回答
卟乖

可以找到父id,可能是我描述有問(wèn)題,我是想找最外層父id

2018年8月21日 18:26
編輯回答
膽怯

有個(gè)很巧的辦法:把Menu對(duì)應(yīng)的數(shù)組對(duì)象arrn轉(zhuǎn)成字符串,然后使用正則查找,異常輕松,可以適配無(wú)限深的層級(jí)。

function findTopParent(menuJson, childId) {
   let menuStr = JSON.stringify(menuJson);
   let reg = new RegExp('MENU_ID":"([^"]+)"[^\\}\\]]+MENU_ID":"' + childId);
   return reg.test(menuStr) ? menuStr.match(reg)[1]: undefined;
}

findTopParent(arrn, '104a580029c54e139210b7e87dca6d89');  //返回8619ca0b6fbc42649a27475e339d5d4a
findTopParent(arrn, '454a580029c54e139210b7e87dca6d82');  //返回d379e3f38cb3472ab18287034f32ef46
2017年7月28日 06:00
編輯回答
憶當(dāng)年

遞歸遍歷

function findParentById(arr,id){
    var parentId = '沒(méi)有父元素',
    hasParentId = function loop(arr){
        return arr.some((item)=>{
            if(item.MENU_ID === id){
                return true
            }else if(Array.isArray(item.MENU_INFO)){
                parentId = item.MENU_ID
                return loop(item.MENU_INFO)
            }else{
                return false
            }
        })
    }(arr)
    return hasParentId ? parentId : '未找到對(duì)應(yīng)父元素'
}

function findParentsById(arr,id){
    var parentIds = [],
        index = 0,
    hasParentId = function loop(arr, index){
        return arr.some((item)=>{
            if(item.MENU_ID === id){
                parentIds = parentIds.slice(0, index)
                return true
            }else if(Array.isArray(item.MENU_INFO)){
                parentIds[index] = item.MENU_ID
                return loop(item.MENU_INFO, index+1)
            }else{
                return false
            }
        })
    }(arr, index)
    return hasParentId ? parentIds : []
}

findParentById(arrn, '454a580029c54e139210b7e87dca6d82');//"104a580029c54e139210b7e87dca6d80"
findParentsById(arrn, '454a580029c54e139210b7e87dca6d82');
//["d379e3f38cb3472ab18287034f32ef46", "104a580029c54e139210b7e87dca6d80"]

這里用104a580029c54e139210b7e87dca6d89測(cè)試,發(fā)現(xiàn)一直找不到,最后看到你id很對(duì)重復(fù)的,比如第一條數(shù)據(jù)的id也是這個(gè),那么這只是你的測(cè)試數(shù)據(jù)還是數(shù)據(jù)就是這樣的可以重復(fù)?如果可以重復(fù)那上面的代碼就需要改下,不過(guò)都是遞歸

2017年3月23日 17:06