js使用filter遞歸過濾樹形結(jié)構(gòu)數(shù)組

今天遇到了這么一個問題,一個管理系統(tǒng)的前端使用vue,通過路由控制用戶權(quán)限。由后端返回權(quán)限編碼列表,前端菜單列表需要對這些權(quán)限編碼進(jìn)行過濾。菜單是樹形結(jié)構(gòu),如果父級菜單被過濾,則該父級下所有子級菜單也被過濾。由于是樹形結(jié)構(gòu),肯定要用到遞歸,大致代碼如下:

// 菜單列表
const menuList = [{
    name: '系統(tǒng)管理',
    code: 'system_manage',
    children: [{
        name: '用戶管理',
        code: 'user_manage',
        children: [{
            name: '添加用戶',
            code: 'add_user'
        }, {
            name: '編輯用戶',
            code: 'edit_user'
        }, {
            name: '刪除用戶',
            code: 'del_user'
        }]
    }, {
        name: '角色管理',
        code: 'role_manage',
        children: [{
            name: '添加角色',
            code: 'add_role'
        }]
    }]
}, {
    name: '業(yè)務(wù)管理',
    code: 'bus_manage',
    children: [{
        name: '流程管理',
        code: 'process_manage'
    }]
}, {
    name: '訂單管理',
    code: 'order_manage'
}]

// 權(quán)限列表
const myMenuCode = ['system_manage', 'user_manage', 'add_user', 'order_manage']

const filterMenu = (menuList, menuCode) => {
    return menuList.filter(item => {
        return menuCode.indexOf(item.code) > -1
    }).map(item => {
        item = Object.assign({}, item)
        if (item.children) {
            item.children = filterMenu(item.children, menuCode)
        }
        return item
    })
}

// 過濾后的菜單
const myMenu = filterMenu(menuList, myMenuCode)

console.log(myMenu)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容