node.js 树状菜单递归算法

本文详细介绍了如何使用递归方法实现后台系统菜单的无限级显示,包括菜单节点的查找、处理及递归调用过程,通过实例演示了菜单数据的排序和结构构建。

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

最近后台系统要做一个后台系统菜单无限极显示的东西。需要用到递归。代码如下:

1,递归方法:

解释:p为父菜单节点。o为菜单列表。

    function dg(p, o) {
        for (var i = 0; i < o.length; i++) {
            var t = o[i];
            if (t.code.length == p.code.length + 2 && t.code.indexOf(p.code) > -1) {
                p.menus.push(t);
                dg(t, o);
            }
        }
    }

2,调用     

       var menusout = new Array();

            var m = new Array();

//下文的menus指的是数据库查询出的数据。按此种格式排序。11,1101,1102,12,1201,120101,1202...

            for (var i = 0; i < menus.length; i++) {
                var t = {};
                t.groupName = menus[i].name;
                t.icon = menus[i].icon;
                t.code = menus[i].code;
                t.title = menus[i].title;
                t.url = menus[i].url;
                t.name = menus[i].name;
                t.menus = new Array();//此处的逻辑是先假设其有下级菜单。赋值为空数组。递归时如果有下级菜单。则只需要往此处push其子菜单即可。
                t.level = menus[i].level;
                t.type= menus[i].type;
                m.push(t);
            }
            for (var i = 0; i < m.length; i++) {
                if (m[i].level == "1") {
                    dg(m[i], m);
                    menusout.push(m[i]);
                }
            }

最后生成的格式为11:它的menus为1101,1102。12:它得menus为1201,1202,其中1201的menus为:120101。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值