Estoy tratando de encontrar la mejor manera (código mínimo) para filtrar una lista recursiva de elementos en función de alguna condición. La lista describe alguna navegación que contiene varias secciones y cada sección contiene elementos de navegación (donde cada elemento de navegación puede contener una cantidad recursiva de elementos de navegación).
Ejemplo:
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' }] }]El usuario tiene una serie de permisos y quiero filtrar todos los elementos que no están en el conjunto de permisos del usuario.
const userPermissions = ['Moderator', 'User']No estoy buscando una solución que simplemente recorra los elementos; Puedo codificar eso yo mismo.
Mira esto:
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; }