在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js如何根據(jù)數(shù)組截取樹形結(jié)構(gòu)?

js如何根據(jù)數(shù)組截取樹形結(jié)構(gòu)?

題目描述

根據(jù)數(shù)組截取樹形結(jié)構(gòu)

題目來源及自己的思路

已存在一顆權(quán)限樹,用戶有其中部分的權(quán)限的數(shù)組,顯示出用戶權(quán)限的樹

相關(guān)代碼

tree為已知的權(quán)限樹

let tree=[
    {
        title:'不需要權(quán)限1',
    },
    {
        title:'權(quán)限2',
        permission:'permission2',
        children:[
                {
                    title:'不需要權(quán)限2.1',
                    children:[{
                                title:'不需要權(quán)限2.1.1',
                               },
                               {
                                 title:'權(quán)限2.1.2',
                                 permission:'permission2.1.2',
                                 children:[{
                                     title:'不需要權(quán)限2.1.2.1',
                                 },{
                                 title:'不需要權(quán)限2.1.3',
                                 
                                 children:[{
                                     title:'權(quán)限2.1.3.1',
                                     permission:'permission2.1.3.1',
                                 },
                                 ]
                               },
                        
                    ]
                },{
                    title:'不需要權(quán)限2.2'
                }
        ]
    },
    {
        title:'權(quán)限3',
        permission:'permission3'
    },
]
let permissions = ['permission2','permission2.1.2']

你期待的結(jié)果是什么?實(shí)際看到的錯誤信息又是什么?

不返回不需要權(quán)限的,不返回用戶沒有的權(quán)限的

[
    {
        title:'權(quán)限2',
        permission:'permission2',
        children:[
                {
                    title:'不需要權(quán)限2.1',
                    children:[
                               {
                                 title:'權(quán)限2.1.2',
                                 permission:'permission2.1.2'
                               },
                        
                    ]
                }
        ]
    }
]
回答
編輯回答
扯不斷

let permissions = ['permission2', 'permission2.1', 'permission2.1.2']
數(shù)組展示權(quán)限層級, 否則邏輯就比較復(fù)雜

之后, 每層做過濾處理

2017年1月13日 12:53
編輯回答
蟲児飛
function hasPermission(element, permissions) { // 有權(quán)限
    return !element.permission || permissions.indexOf(element.permission) != -1;
}
function testPermission(element, permissions) { // 符合條件
    return element.permission && permissions.indexOf(element.permission) != -1;
}
function getPermissionTree(tree, permissions) {
    return tree.filter(element => {
        if (hasPermission(element, permissions)) { // 有權(quán)限
            if (element.children) {
                const childTree = getPermissionTree(element.children, permissions);
                if (childTree.length > 0) { // childTree中有符合條件的
                    element.children = childTree;
                    return true;
                } else if (testPermission(element, permissions)) { // 本身符合條件
                    element.children = undefined;
                    return true;
                }
                return false;
            } else {
                return testPermission(element, permissions); // 符合條件
            }
        }
    })
}
console.log(getPermissionTree(tree, permissions));
2017年5月3日 05:44