3 回答
TA贡献1820条经验 获得超9个赞
var f = item => {
if (item['subMenus']) {
item['subMenus'] = item['subMenus'].filter(f);
return true;
} else if (item['roles']) {
return item['roles'].indexOf('admin') !== -1;
} else {
return false;
}
}
var result = data.filter(f);
TA贡献1877条经验 获得超1个赞
var data = [
{
path: 'levelone', name: '第一级', iconClass: 'fa-navicon', isRoot: true, subMenus: [
{
path: 'leveltwo', name: '第二级', iconClass: 'fa-navicon', subMenus: [
{ path: 'levelthree', name: '第三级', roles: ['admin'], iconClass: 'fa-navicon' }
]
},
{ path: 'leveltwo_R', name: '第二级_R', iconClass: 'fa-navicon' }
]
},
{ path: 'user', name: '用户管理', roles: ['admin'], iconClass: 'fa-language', isRoot: true },
{ path: 'dictionary', name: '字典管理', roles: ['admin'], iconClass: 'fa-language', isRoot: true },
{ path: 'role', name: '角色管理', roles: ['admin'], iconClass: 'fa-vcard', isRoot: true },
{ path: 'outline', name: '违规管理', roles: ['admin'], iconClass: 'fa-exclamation-triangle', isRoot: true }
]
var dataArr = [];
function filter(arr) {
for (let i = 0; i < arr.length; i++) {
if(arr[i].subMenus && arr[i].subMenus.length){
filter(arr[i].subMenus);
}else{
if(!(arr[i].roles && arr[i].roles.includes('admin'))){
dataArr.push(arr[i]);
arr.splice(i, 1)
}
}
}
}
filter(data);
console.log(data)
console.log(dataArr)
在data里剔除了不符合条件的数据放到dataArr里面,不知道是不是你想要的结果
TA贡献1804条经验 获得超8个赞
some是有一个返回true就停止执行了,所以第二个没有去检测
var arr = [
{ path: 'levelone', name: '第一级', iconClass:'fa-navicon', isRoot: true, subMenus:[
{ path: 'leveltwo', name: '第二级', iconClass:'fa-navicon',subMenus:[
{ path: 'levelthree', name: '第三级', roles:['admin'], iconClass:'fa-navicon' }
]},
{ path: 'leveltwo_R', name: '第二级_R', iconClass:'fa-navicon' }
]},
{ path: 'user', name: '用户管理', roles:['admin'], iconClass:'fa-language', isRoot: true },
{ path: 'dictionary', name: '字典管理', roles:['admin'], iconClass:'fa-language', isRoot: true },
{ path: 'role', name: '角色管理', iconClass:'fa-vcard', isRoot: true , subMenus:[
{ path: 'leveltwo_R', name: '第二级_R', iconClass:'fa-navicon' },
{ path: 'leveltwo_R', name: '第二级_R', iconClass:'fa-navicon' },
{ path: 'leveltwo_R', name: '第二级_R', iconClass:'fa-navicon' }
]},
{ path: 'outline', name: '违规管理', roles:['admin'], iconClass:'fa-exclamation-triangle', isRoot: true }
]
function filterRoutes(route,role) {
var bool;
for(var i=route.length-1;i>=0;i--){
bool = !(route[i].roles && route[i].roles.indexOf(role)>-1);
if(route[i].subMenus && route[i].subMenus.length){
filterRoutes(route[i].subMenus,role)
bool && route[i].subMenus.length == 0 && route.splice(i,1)
}else{
bool && route.splice(i,1)
}
}
}
filterRoutes(arr,'admin')
console.log(arr)
添加回答
举报
