다양한 권한이 있습니다.
const permissions = ['search', 'reports', 'whitelist'];
그리고 메뉴가 있어요
const menus = [
{
text: 'Navigation',
link: 'navigation',
topic: 'all',
},
{
text: 'Dictionary',
link: 'dict',
topic: 'src',
},
{
text: 'Services',
link: '/services',
submenu: [
{
text: 'Check company',
link: '/services/search',
topic: 'search',
},
{
text: 'Report statistic',
link: '/services/reportstatistic',
topic: 'another-topic',
},
{
text: 'Report request',
link: '/services/getrequestreport',
topic: 'another-topic-2',
},
{
text: 'Get whitelist',
link: '/services/getresponsereport',
topic: 'whitelist',
},
{
text: 'Get data',
link: '/services/requestdata',
topic: 'reports',
},
],
},
];
나는 필터에 필요 menus
가있는 경우 배열의 각 항목을 확인하기 위해 topic
허가 중 하나에 등호를 permissions
배열하고있는 경우 submenu
다음 동일 또는 경우 각 항목 폼 하위 메뉴를 확인 topic ==='all'
하고 어쨌든 새로운 메뉴로 하나를 추가 할 수 있습니다. 필터 후 예상 결과는 다음과 같습니다.
const newArrr = [
{
text: 'Navigation',
link: 'navigation',
topic: 'all',
},
{
text: 'Services',
link: '/services',
submenu: [
{
text: 'Check company',
link: '/services/search',
topic: 'search',
},
{
text: 'Get whitelist',
link: '/services/getresponsereport',
topic: 'whitelist',
},
{
text: 'Get data',
link: '/services/requestdata',
topic: 'reports',
},
],
},
];
자체 루프를 만들려고했지만 올바르지 않습니다.
for (let menu of menus) {
for (let permission of filteredPermissions) {
if (menu.topic && (menu.topic == permission || menu.topic === 'all')) {
newArr.push(menu);
}
if (menu.submenu) {
for (let submenu of menu.submenu) {
for (let permissionSecond of filteredPermissions) {
if (!(submenu.topic == permissionSecond) || !(submenu == 'all')) {
menu.submenu.splice(menu.submenu[submenu], 1);
}
}
}
}
}
}
이것이 내가 할 방법입니다. 먼저 .topic
권한에 포함되어 있는지 여부에 따라 상위 배열을 필터링 한 다음 submenu
배열 이있는 결과를 반복 하고 하위 배열 속성을 필터링 된 버전에 다시 할당합니다.
const permissions = ['search', 'reports', 'whitelist'];
permissions.push('all');
const menus=[{text:"Navigation",link:"navigation",topic:"all"},{text:"Dictionary",link:"dict",topic:"src"},{text:"Services",link:"/services",submenu:[{text:"Check company",link:"/services/search",topic:"search"},{text:"Report statistic",link:"/services/reportstatistic",topic:"another-topic"},{text:"Report request",link:"/services/getrequestreport",topic:"another-topic-2"},{text:"Get whitelist",link:"/services/getresponsereport",topic:"whitelist"},{text:"Get data",link:"/services/requestdata",topic:"reports"}]}];
const filteredMenus = menus.filter(
item => !item.topic || permissions.includes(item.topic)
);
filteredMenus
.filter(item => item.submenu)
.forEach(item => item.submenu = item.submenu.filter(
subitem => permissions.includes(subitem.topic)
));
console.log(filteredMenus);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다