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。
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。
相关文章推荐
- node.js Hello world
- node.js node包管理器--npm
- node.js 源码安装node.js
- 基于node实现websocket协议
- datanode数据存放位置研究
- Leetcode 25. Reverse Nodes in k-Group
- 基于node实现websocket协议
- async模块的异步处理
- 获取文件上传进度
- 《LeetBook》leetcode题解(19):Remove Nth Node From End of List[E]——双指针解决链表倒数问题
- LeetCode 237. Delete Node in a Linked List C语言
- hadoop HA启动时 两个namenode节点都是standby,解决办法
- 不完全node实践教程-总结
- nodejs小问题:[1]express不是内部或外部命令
- 菜鸟学习nodejs--回调函数
- 不完全node实践教程-第七发
- 222. Count Complete Tree Nodes
- node学习方法
- 不完全node实践教程-第六发
- node.js模块--formidable