您的位置:首页 > Web前端 > Node.js

node.js 树状菜单递归算法

2016-04-25 09:52 701 查看
最近后台系统要做一个后台系统菜单无限极显示的东西。需要用到递归。代码如下:

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: