存储结构:

生成树算法:

 var zNodes = [];// jinja模板 从后台取回 每一级菜单的 list { % for node in result % }var obj = new Object();obj.id = {{ node.id }};obj.pId = {{ node.pid }};obj.text = '{{ node.name }}';obj.attributes = {};obj.attributes['filename'] = '{{ node.filename }}';obj.attributes['url'] = '{{ node.url }}';zNodes.push(obj); { % endfor % }function transformTozTreeFormat(setting, sNodes) {//生成树核心算法:将list组装为jsonvar i, l;var key = setting.idKey;var parentKey = setting.parentKey;var childKey = setting.childKey;var attrKey = setting.attrKey;if (!key || key == "" || !sNodes) return [];var r = [];var tmpMap = {};for (i = 0, l = sNodes.length; i < l; i++) {tmpMap[sNodes[i][key]] = sNodes[i]; //将所有元素平铺存在map中,便于后续操作(是引用传递)}for (i = 0, l = sNodes.length; i < l; i++) { //遍历sNodes数组中的每一个节点if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) { // 如果在已经存好的map中找到了当前节点的父节点,并且父节点不是其本身if (!tmpMap[sNodes[i][parentKey]][childKey]) { //如果这个父节点没有childtmpMap[sNodes[i][parentKey]][childKey] = []; //给它初始化一个空的child列表}tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]); //将当前节点push到对应父节点的child数组中delete sNodes[i].pId; //针对easyui约定的tree数据格式,删除已无作用的pid项//console.log("删除pid");//console.log(sNodes[i]);} else { //如果在已经存好的map中没有找到当前节点的父节点delete sNodes[i].pId;//console.log("删除pid");//console.log(sNodes[i]);r.push(sNodes[i]); //将当前节点push进r数组中}}return r;}var setting = {idKey: 'id',parentKey: 'pId',childKey: 'children',attrKey: 'attributes',};function resolve() {var jsonArray = transformTozTreeFormat(setting, zNodes);console.log(jsonArray);return jsonArray; }}//加载树内容$('#tt').tree({data: resolve(),...

效果:

easyui树形菜单生成算法,及在关系型数据库中的存储方式(非递归,高效算法)相关推荐

  1. 数据结构——二叉树的递归遍历算法与非递归遍历算法+层次遍历算法

    (文章篇幅有点长,二叉树的递归遍历算法不作详细分析,但是二叉树的非递归遍历算法和层次遍历算法都有非常详细的分析过程,记得往下翻哦!) 二叉树的递归遍历算法实现 我们首先用递归的方法先序遍历创建这样一棵 ...

  2. 雷林鹏分享:jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单

    jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单 easyui 的树(Tree)插件允许您创建一个复选框树.如果您点击一个节点的复选框,这个点击的节点信息将向上和向下继承.例如:点击 ...

  3. 地铁线路图中任意两点间所有路径高效算法

    在求图线任意两点间最短路径时,利用floyd.dijdstra等成熟的算法可以求得,效率还不错.但要求换乘最少.最舒适等路径时,需要求线网图中任意两个点的所有路径,然后根据条件筛选,以上算法无能为力. ...

  4. 关系型数据库中多对多关系的中间表的命名规则

    在关系型数据库中,除了有一对一,一对多外,还有多对多的关系.前两种关系只需要表本身就能表达清楚,然而多对多需要第三张中间表才能表达清楚多对多的关系. 中间表在一般情况下是由三个字段组成: 1.中间表本 ...

  5. mysql表中的多对多关系表_「一对多」关系型数据库中一对多,多对一,多对多关系(详细) - seo实验室...

    一对多 在关系型数据库中,通过外键将表跟表之间联系在了一起. 一个班级有很多学生,外键维护在学生的一方,也就是多的一方.(在做页面设计的时候,需要把两个表连接到一块查询信息) 建立一个student和 ...

  6. mysql支持非关系_说下oracle、mysql、非关系型数据库中的索引结构?

    谢邀~~树懒君悉心整理了一篇索引结构方面的内容,跟各位知友分享分享~ Oracle 索引的数据结构:B-TreeOracle 数据库使用 B-trees 存储索引,来加速数据访问.若没有索引,你必须顺 ...

  7. Sqoop(三)将关系型数据库中的数据导入到HDFS(包括hive,hbase中)

    本文转自:https://www.cnblogs.com/yfb918/p/10855170.html 一.说明: 将关系型数据库中的数据导入到 HDFS(包括 Hive, HBase) 中,如果导入 ...

  8. 树:二叉树的非递归遍历算法

    二叉树的递归遍历 二叉树的递归遍历算法,写法很简单,比如说前序遍历树,如下: //前序遍历 void PreOrderTraverse(BiTree tree) {if (NULL != tree){ ...

  9. 实现二叉树的三种非递归遍历算法

    [问题描述] 编写程序,实现二叉树的三种非递归遍历算法:先序非递归,中序非递归,后序非递归. [输入形式] 输入建树序列. [输出形式] 输出三种遍历序列. [样例输入] A B C # # # # ...

最新文章

  1. Linux读写锁释放,Linux读写锁的使用
  2. PHP的内存与CPU获取
  3. int型数据占用的内存空间及ASCII码表
  4. Element表格嵌入复选框以及单选框
  5. Android Input子系统-含实例源码
  6. 华中科技大学计算机学院考研大纲,2021华中科技大学考研大纲参考书目汇总
  7. HDU2002 计算球体积【入门】
  8. android源码下编译自有工程通用make模板
  9. fraction类的创建java_设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。(Java语言)...
  10. Android 圆形进度条控件
  11. win10计算机禁用用户账户控制,win10系统在关闭了用户账户控制的情况下无法打开... 的解决方法...
  12. 如何用Python写一个小游戏(1)
  13. 动图ps在html不动,教你如何用ps把动态图片加到静态图片上
  14. TweenMax之一些方法
  15. 百新谷PCB在线下单+ERP智能生产管理系统--实施篇
  16. python中re.compile_什么是pythonre.compile函数?
  17. 样本方差为什么要除n-1,而不是n
  18. ofd文件怎么编辑?speedpdf免费转Word解决修改难题
  19. mysql pk uk ak,最重要的MySQL开发规范 全都在这了
  20. 【并发编程系列6】Condition队列原理及await和singal(等待/唤醒)机制源码分析

热门文章

  1. php 中set是什么_php中set
  2. [Windows驱动开发](四)内存管理
  3. 2_3 ProxyMode.cpp 代理模式
  4. PyCairo 中的透明度
  5. Java代码优化:使用构造函数和使用一个setter的效率差别
  6. Redis在持久化时产生的延迟
  7. 腾讯2020校园招聘----逛街
  8. 音视频技术开发周刊 | 224
  9. 微软或在开发自己的 CPU、TikTok 发布电视版本、索尼撤下《赛博朋克2077》并为玩家退款|Decode the Week...
  10. AVS3关键技术、性能和复杂度分析