1. /**
  2. * 将list装换成tree
  3. * @param {Object} myId 数据主键id
  4. * @param {Object} pId 数据关联的父级id
  5. * @param {Object} list list集合
  6. */
  7. function listToTree(myId,pId,list){
  8. function exists(list, parentId){
  9. for(var i=0; i<list.length; i++){
  10. if (list[i][myId] == parentId) return true;
  11. }
  12. return false;
  13. }
  14.  
  15. var nodes = [];
  16. // get the top level nodes
  17. for(var i=0; i<list.length; i++){
  18. var row = list[i];
  19. if (!exists(list, row[pId])){
  20. nodes.push(row);
  21. }
  22. }
  23.  
  24. var toDo = [];
  25. for(var i=0; i<nodes.length; i++){
  26. toDo.push(nodes[i]);
  27. }
  28. while(toDo.length){
  29. var node = toDo.shift(); // the parent node
  30. // get the children nodes
  31. for(var i=0; i<list.length; i++){
  32. var row = list[i];
  33. if (row[pId] == node[myId]){
  34. //var child = {id:row.id,text:row.name};
  35. if (node.children){
  36. node.children.push(row);
  37. } else {
  38. node.children = [row];
  39. }
  40. toDo.push(row);
  41. }
  42. }
  43. }
  44. return nodes;
  45. }
  46.  
  47. var list=[
  48. {"ids":1,"parendId":0,"name":"Foods",url:"wwww"},
  49. {"ids":2,"parentId":1,"name":"Fruits"},
  50. {"ids":3,"parentId":1,"name":"Vegetables"},
  51. {"ids":4,"parentId":2,"name":"apple"},
  52. {"ids":5,"parentId":2,"name":"orange"},
  53. {"ids":6,"parentId":3,"name":"tomato"},
  54. {"ids":7,"parentId":3,"name":"carrot"},
  55. {"ids":8,"parentId":3,"name":"cabbage"},
  56. {"ids":9,"parentId":3,"name":"potato"},
  57. {"ids":10,"parentId":3,"name":"lettuce"},
  58.  
  59. {"ids":11,"parendId":0,"name":"Foods"},
  60. {"ids":12,"parentId":11,"name":"Fruits"},
  61. {"ids":13,"parentId":11,"name":"Vegetables"},
  62. {"ids":14,"parentId":12,"name":"apple"},
  63. {"ids":15,"parentId":12,"name":"orange"},
  64. {"ids":16,"parentId":13,"name":"tomato"},
  65. {"ids":17,"parentId":13,"name":"carrot"},
  66. {"ids":18,"parentId":13,"name":"cabbage"},
  67. {"ids":19,"parentId":13,"name":"potato"},
  68. {"ids":20,"parentId":13,"name":"lettuce"}
  69. ];
  70.  
  71. console.log(JSON.stringify(listToTree("ids","parentId",list)));
  72. console.log(listToTree("ids","parentId",list));

朝朝暮暮 终于写出来了,好几年前的心愿了

javascript将list转换成树状结构的更多相关文章

  1. PHP将数据集转换成树状结构

    /** * 把返回的数据集转换成Tree * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * @param string $l ...

  2. js修改父子json格式成树状结构格式

    js修改父子json成树状结构 var json = [ { "id" : "01", "pId":"" } , { & ...

  3. linux 把ls -R格式化成树状结构

    谁能写脚本把linux中的ls -R命令的结果格式化成树状结构? 最好是shell脚本!欢迎讨论! 参与讨论有可能意外获取iPhone6哦~~

  4. js中把ajax获取的数据转化成树状结构(并做成多级联动效果)

    1.首先通过ajax获取数据,此处省略,直接贴出获取到的数据格式 var arr = [{ id: 1, name: "一级标题", pid: 0 }, { id: 2, name ...

  5. php 二维数组转换成树状数组(转)

    <?php/** * @param array $list 要转换的结果集 * @param string $pid parent标记字段 * @param string $level leve ...

  6. 05 - json转成树状结构

    var jsonData = eval(`[ {"id":"4","pid":"1","name": ...

  7. iOS:二叉树多级表格的使用,使用三方库TreeTableView-master实现对json解析数据的递归遍历整理成树状结构

    在项目中,我们有时需要使用二叉树来实现多级表格的递归遍历查询,如果对二叉树比较懂,那么写起来其实也不费事,为了节省开发时间,下面介绍一下第三方库TreeTableView-master,这个三方库上给 ...

  8. 使用Map辅助拼装树状结构,消除递归调用

    目前菜单或其他树状结构在数据库中的存储,多数是以一个parentid作为关联字段,以一维形式存储.使用时全部查询出来,然后在内存中拼装成树状结构.现在主要涉及的是拼装方法的问题. 一般可以进行 递归调 ...

  9. 原生JS实现树状结构列表

    树状结构列表,这个技术点之前有写过了,是基于vue讲解,但似乎都没有解决痛点,最基础的原生JS该怎么实现呢? 这篇文章会全面详细的介绍树状结构列表的实现,从数据处理成树状结构,到动态生成dom节点渲染 ...

随机推荐

  1. nightwatchjs 基于nodejs&& webdriver 协议的自动化测试&&持续集成框架

    nightwatchjs 是基于nodejs&& webdriver 协议的自动化测试&&持续集成框架 参考架构 参考资料 http://nightwatchjs.or ...

  2. vue的watcher 关于数组和对象

    数组 不能被监听到的情况 1.直接下标赋值(但对象直接修改原有属性值可以渲染视图,虽然也监听不到) 2.修改数组length 解决方法: this.$set(this.arr,index,val) p ...

  3. Kubernetes 知识点

    自己总结的 Kubernetes 的各模块(待补充) 各模块包含关系: namespace => node => pod => container table th:first-of ...

  4. java中length与length()

    length是对数组而言的,指的是数组的长度. length()是对字符串而言的,指的是字符串所包含的字符个数. public class LengthDemo { public static voi ...

  5. java-网页404(个例)

    tomcat正常启动网址404问题 个例情况: 1.选择第二个 2.web.xml配置不对(是因为缺少相应jar包和配置错误,根据控制器显示的错误一步步解决错误,最后OK) 3.构建路径中有错误(更换 ...

  6. const引用返回值

    一.引用 引用是别名 必须在定义引用时进行初始化.初始化是指明引用指向哪个对象的唯一方法. const 引用是指向 const 对象的引用: ; const int &refVal = iva ...

  7. Swoole来实现实时异步任务队列

    假如要发100封邮件,for循环100遍,用户直接揭竿而起,什么破网站!但实际上,我们很可能有超过1万的邮件.怎么处理这个延迟的问题?答案就是用异步.把“发邮件”这个操作封装,然后后台异步地执行1万遍 ...

  8. 经典面试题目——找到第n个丑数(参考《剑指offer(第二版)》面试题49)

    一.题目大意 给你一个数n,要求返回第n个丑数.其中,丑数的定义如下: 丑数是指只包含因子2.3和5的数.(数字1也是丑数,不过是个特例)引用<剑指offer>上的话来说,对于一个数M,如 ...

  9. LeetCode——5.Longest Palindromic Substring

    一.题目链接:https://leetcode.com/problems/longest-palindromic-substring/ 二.题目大意: 给定一个字符串,找出它最长的回文子串.例如,字符 ...

  10. [转]jvm加载类规则

    jvm包括三种类加载器: 第一种:bootstrap classloader:加载Java的核心类. 第二种:extension classloader:负责加载jre的扩展目录中的jar包. 第三种 ...