根据权限数组,递归筛选菜单目录js
时间: 2024-11-24 13:43:23 浏览: 11
在JavaScript中,我们可以使用递归来根据用户权限数组(通常是对象数组,包含用户可以访问的菜单ID或路径)来筛选菜单目录。下面是一个简单的例子:
```javascript
function filterMenu(menuList, userPermissions) {
return menuList.filter(item => {
// 检查当前item是否在其父级数组中被授权
if (item.children && item.children.some(childId => userPermissions.includes(childId))) {
// 如果有子项,并且至少有一个子项被授权,保留该条目
return true;
} else if (userPermissions.includes(item.id)) {
// 或者如果用户的权限直接包括了这个节点,则保留
return true;
}
// 如果都不满足,继续检查子节点
if (item.children) {
const filteredChildren = filterMenu(item.children, userPermissions);
// 如果子节点中有任何一个被授权,那么保留父节点
return filteredChildren.length > 0;
}
// 没有子节点并且用户没有直接权限,则返回false
return false;
});
}
// 使用示例
const menuData = [
{ id: '1', name: '菜单A', children: [{ id: '2', name: '子菜单A'}, { id: '3', name: '子菜单B'}] },
{ id: '4', name: '菜单B', children: [{ id: '5', name: '子菜单C'}] },
// ...
];
const userPermissions = ['1', '3']; // 用户拥有对菜单A和子菜单B的权限
const accessibleMenus = filterMenu(menuData, userPermissions);
阅读全文