一维权限数组生成树结构权限

本文介绍了一种将一维数组转换为树形结构的方法。通过递归函数实现,适用于权限管理等场景中对数据进行层级展示的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述
将let authList = [
    {
        id:"1",
        parentId:"0"
    },{
        id:"2",
        parentId:"0"
    },{
        id:"21",
        parentId:"2"
    },{
        id:"211",
        parentId:"21"
    }
]
转成
let authTree = {  
        id:"0", 
        children:[  
            {  
                id:"1",  
                parentId:"0", 
                treeId:"0-1" 
                children:[]  
            },{  
                id:"2",  
                parentId:"0",  
                treeId:"0-2"
                children:[  
                    {  
                        id:"21",  
                        parentId:"2",  
                        treeId:"0-2-21"
                        children:[  
                            {  
                                id:"211",  
                                parentId:"21",
                                treeId:"0-2-21-211" 
                            }  
                        ]  
                    }  
                ]  
            }  
        ]  
    }  

代码如下:

    /*
    * authList:需要被转换的一维数组
    * authTreeRootNode:权限树根节点
    * idMap:记录树结构的id路径
    */
    function convertToTree(authList,authTreeRootNode,idMap){
        authTreeRootNode.children = [];
        let parntId = authTreeRootNode.id
        for(let i = authList.length-1;i>=0;i--){
            if(authList[i].parentId == parntId){
                idMap[authList[i].id] = idMap[authList[i].parentId]?`${idMap[authList[i].parentId]}-${authList[i].id}` : authList[i].id;
                authList[i].treeId = idMap[authList[i].id];
                authTreeRootNode.children.push(authList[i]);
                convertToTree(authList,authTreeRootNode[authTreeRootNode.children.length-1],idMap);
            }
        }
    }

运行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值