函数如下:
数据如下:
[{
"name": "数据看板",
"id": "data",
"pageName": "tableeauData",
"list": []
}, {
"name": "审计模块",
"id": "caigou",
"pageName": "tableeauCaigou",
"list": [{
"name": "采购模块",
"isActive": true,
"pageName": "tableeauCaigou",
"id": "caigou"
}, {
"name": "分销模块",
"id": "fenxiao"
}, {
"name": "仓库物流模块",
"id": "cangkuwuliu"
}, {
"name": "媒介模块",
"id": "meijie"
}]
}, {
"name": "风险场景",
"id": "caigoubuheli",
"pageName": "caigoubuheli",
"list": [{
"name": "采购模块",
"isActive": true,
"pageName": "tableeauCaigou",
"id": "caigou",
"list": [{
"name": "采购拆单",
"isActive": true,
"pageName": "caigoubuheli",
"id": "caigoubuheli"
}, {
"name": "招标管理不规范",
"isActive": true,
"pageName": "zaobiaobuhege",
"id": "zaobiaobuhege"
}]
}, {
"name": "分销模块",
"id": "fenxiao"
}, {
"name": "仓库物流模块",
"id": "cangkuwuliu"
}, {
"name": "媒介模块",
"id": "meijie"
}]
}, {
"name": "仓库物流模块",
"id": "cangkuwuliu",
"pageName": "cangku",
"list": []
}, {
"name": "媒介模块",
"id": "meijie",
"pageName": "meijie",
"list": []
}]
就是一个json里有很多的list嵌套,这种常常用于处理树形结构的数据,比如菜单,再比如含有各种分类的商品,都是需要通过子节点反推到父节点
let no = 0
function findNodeByPageName(list, pageName) {
for (const item of list) {
if (item.list) {
const result = findNodeByPageName(item.list, pageName);
if (result) {
no++
result['parent' + no] = item;
return result;
}
}
if (item.pageName === pageName) {
return {
current: item,
parent: null
};
}
}
return null;
}
// 示例用法
const result = findNodeByPageName(menuList.value, routerName);
console.log(result);
结果如下:
从当前节点进行反推,找到所有的父节点,然后用no进行标号,数字最大的则为根节点。