我正在嘗試找到基于某些條件過濾遞回專案串列的最佳方法(最少代碼)。該串列描述了一些包含多個部分的導航,并且每個部分都包含導航項(其中每個導航項可以包含遞回數量的導航項)。
例子:
const navSections = [{
title: 'Section A',
items: [
{
title: 'A1',
permission: 'Moderator'
},
{
title: 'A2',
permission: 'Moderator',
items: [{
title: 'A21',
permission: 'Admin'
},
{
title: 'A22',
permission: 'Admin'
}]
}]
},
{
title: 'Section B',
items: [
{
title: 'B1',
permission: 'User'
},
{
title: 'B2',
permission: 'User'
},
{
title: 'B3',
permission: 'Admin'
}]
}]
用戶有一組權限,我想過濾掉所有不在用戶權限集中的專案。
const userPermissions = ['Moderator', 'User']
我不是在尋找簡單地遍歷元素的解決方案;我可以自己編碼。
uj5u.com熱心網友回復:
檢查這個:
const navSections = [{title: 'Section A',items: [{title: 'A1',permission: 'Moderator',},{title: 'A2',permission: 'Moderator',items: [{title: 'A21',permission: 'Admin',},{title: 'A22',permission: 'Admin',}]}]},{title: 'Section B',items: [{title: 'B1',permission: 'User',},{title: 'B2',permission: 'User',},{title: 'B3',permission: 'Admin',}]}]
const userPermissions = ['Moderator', 'User']
const navSectionsByPermissions = (arr, permissions, isBase = true) =>
arr.filter(o => {
if (o.items) {
o.items = navSectionsByPermissions(o.items, permissions, false)
}
return o.permission && permissions.includes(o.permission) || isBase
})
const result = navSectionsByPermissions(navSections, userPermissions)
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/476466.html
標籤:javascript 打字稿
