树形数据结构化

例如现在又这样的一组数据:

const data = [
    {
        id:2,
        pid:0,
        path:'/course',
        name:'Course',
        title:'课程管理',
    },
    {
        id:3,
        pid:2,
        path:'operate',
        name:'CourseOperate',
        link:'/course/operate',
        title:'课程操作',
    },
    {
        id:4,
        pid:3,
        path:'info_data',
        name:'CourseInfoData',
        link:'/course/operate/info_data',
        title:'课程数据',
    },
    {
        id:5,
        pid:2,
        path:'add',
        name:'CourseAdd',
        link:'/course/add',
        title:'添加课程',
    },
    {
        id:6,
        pid:0,
        path:'/student',
        name:'Student',
        title:'学生管理',
    },
    {
        id:7,
        pid:6,
        path:'operate',
        name:'StudentOperate',
        link:'/student/operate',
        title:'学生操作',
    },
    {
        id:8,
        pid:6,
        path:'add',
        name:'StudentAdd',
        link:'/student/add',
        title:'添加学生',
    },
]

根据pid和id的关系生成树形结构

方法如下:

function formatRouterTree(data) {
    let parents = data.filter(p => p.pid === 0),
        children = data.filter(c => c.pid !== 0);
    dataToTree(parents, children)
    function dataToTree(parents, children) {
        parents.map((p) => {
            children.map((c, i) => {
                if (c.pid === p.id) {
                    let _c = JSON.parse(JSON.stringify(children));
                    _c.splice(i, 1);
                    dataToTree([c], _c);
                    if (p.children) {
                        p.children.push(c);
                    } else {
                        p.children = [c]
                    }
                }
            })
        })
    }
    return parents;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值