前端根据一个数组便利出部门树,菜单树,一个js便利函数即可解决

部门树,菜单树其实底层都是一样的,这是后端返回的数组

let lists = [
    { name: '系统管理', id: '1', pid: '0' },
    { name: '系统管理二级菜单1', id: '10', pid: '1' },
    { name: '系统管理二级菜单2', id: '11', pid: '1' },
    { name: '系统管理二级菜单子菜单1', id: '110', pid: '11' },
    { name: '系统管理二级菜单子菜单的子菜单', id: '1101', pid: '110' },
    { name: '角色管理', id: '2', pid: '0' },
    { name: '角色管理二级菜单', id: '20', pid: '2' },
    { name: '角色管理三级菜单', id: '200', pid: '20' },
    { name: '角色管理四级菜单', id: '2000', pid: '200' },
    { name: '角色管理五级菜单', id: '20000', pid: '2000' },
    { name: '用户管理', id: '3', pid: '0' },
    { name: '用户管理二级', id: '30', pid: '3' }
]

这是我们的遍历函数

let fun = function (list, id) {
    let child = []; // 这是用来装子级的数组
    list.forEach(item => {
        if (item.pid == id) { 
	        // 是当前循环的菜单的子集,写入数组
	        // 然后当前整个item可能还不是最后一集菜单,继续执行这个fun方法,找找看有没有子集
            child.push(item)
            item.child = fun(list, item.id)
        }
    })
    return child; // 返回当前循环最后得到的菜单集合
}

最后只需要调用这个方法,即可得到想要的部门数,适用于动态部门树,比如后台可自动添加,前端有不知道到底有多少层级,用这个函数就完美解决啦

let obg = fun(lists, "0") // 我这里的一级菜单pid都为0,所以第一次调用传0,可以根据实际情况变化
// 最后得出的结果如下
let menu = [
    {
        "name": "系统管理", 
        "id": "1", 
        "pid": "0", 
        "child": [
            {
                "name": "系统管理二级菜单1", 
                "id": "10", 
                "pid": "1", 
                "child": [ ]
            }, 
            {
                "name": "系统管理二级菜单2", 
                "id": "11", 
                "pid": "1", 
                "child": [
                    {
                        "name": "系统管理二级菜单子菜单1", 
                        "id": "110", 
                        "pid": "11", 
                        "child": [
                            {
                                "name": "系统管理二级菜单子菜单的子菜单", 
                                "id": "1101", 
                                "pid": "110", 
                                "child": [ ]
                            }
                        ]
                    }
                ]
            }
        ]
    }, 
    {
        "name": "角色管理", 
        "id": "2", 
        "pid": "0", 
        "child": [
            {
                "name": "角色管理二级菜单", 
                "id": "20", 
                "pid": "2", 
                "child": [
                    {
                        "name": "角色管理三级菜单", 
                        "id": "200", 
                        "pid": "20", 
                        "child": [
                            {
                                "name": "角色管理四级菜单", 
                                "id": "2000", 
                                "pid": "200", 
                                "child": [
                                    {
                                        "name": "角色管理五级菜单", 
                                        "id": "20000", 
                                        "pid": "2000", 
                                        "child": [ ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }, 
    {
        "name": "用户管理", 
        "id": "3", 
        "pid": "0", 
        "child": [
            {
                "name": "用户管理二级", 
                "id": "30", 
                "pid": "3", 
                "child": [ ]
            }
        ]
    }
]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端攻城狮路飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值