我正试图找到最佳方法(最少的代码)来根据某些条件过滤递归项列表.该列表描述了一些包含多个部分的导航,每个部分包含导航项(其中每个导航项可以包含递归的导航项).

Example:

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 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; }

Javascript相关问答推荐

空的结果抓取网站与Fetch和Cheerio

在拖放时阻止文件打开

你怎么看啦啦队的回应?

使用JQuery单击元素从新弹出窗口获取值

使用Nuxt Apollo在Piniastore 中获取产品细节

Reaction组件在本应被设置隐藏时仍显示

try 使用PM2在AWS ubuntu服务器上运行 node 进程时出错

以编程方式聚焦的链接将被聚焦,但样式不适用

第一项杀死下一项,直到数组长度在javascript中等于1

如何访问此数组中的值?

JavaScript&;Reaction-如何避免在不使用字典/对象的情况下出现地狱?

select 2-删除js插入的项目将其保留为选项

从异步操作返回对象

不允许在对象文本中注释掉的属性

VITE版本中的内联SVG

我正在用JS编码一个链表,而我编写的一个Prepreend函数并没有按照我的预期工作

RXJS相依可观量

JS函数返回未定义的值,即使返回值有效

当每行和每列中的正方形数量超过或超过4;时,我的网格中的正方形就会从容器溢出

如何延迟Java脚本滚轮事件