为了账号安全,请及时绑定邮箱和手机立即绑定

js json对象从子级找最外层父级怎么找,有方法吗

js json对象从子级找最外层父级怎么找,有方法吗

森栏 2019-03-13 18:15:50
父级找子集直接点就行了,子集找父级呢?怎么操作let arrn=[        {            "MENU_URL": "dashboard",            "MENU_ID": "104a580029c54e139210b7e87dca6d89",            "MENU_NAME": "监控面板"        },        {            "MENU_URL": "systemManage",            "MENU_ID": "769130d1918d47219e6f0c463a1c9c67",            "MENU_NAME": "系统管理"        },        {            "MENU_URL": "serviceManage",            "MENU_ID": "8619ca0b6fbc42649a27475e339d5d4a",            "MENU_INFO": [                {                    "MENU_URL": "userInfo",                    "MENU_ID": "104a580029c54e139210b7e87dca6d89",                    "MENU_NAME": "三户信息"                }            ],            "MENU_NAME": "业务管理"        },        {            "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": "监控面板222"                        }                    ],                    "MENU_NAME": "监控面板111"                },                {                    "MENU_URL": "dashboard",                    "MENU_ID": "104a580029c54e139210b7e87dca6d89",                    "MENU_NAME": "监控面板333"                }            ],            "MENU_NAME": "订购信息查询"        }    ]知道监控面板222的MENU_ID,要找到最外层的MENU_ID现在写了一个能从第二级找到第一级```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')```有没有高手可以改造一下,用递归什么的,查不定级数的
查看完整描述

4 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

有个很巧的办法:把Menu对应的数组对象arrn转成字符串,然后使用正则查找,异常轻松,可以适配无限深的层级。


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


查看完整回答
反对 回复 2019-04-11
?
郎朗坤

TA贡献1921条经验 获得超9个赞

你怎么拿到子集的?子集去掉点后面的不就是父级。


查看完整回答
反对 回复 2019-04-11
?
翻阅古今

TA贡献1780条经验 获得超5个赞

可以找到父id,可能是我描述有问题,我是想找最外层父id


查看完整回答
反对 回复 2019-04-11
  • 4 回答
  • 0 关注
  • 633 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信