zoukankan      html  css  js  c++  java
  • javascript将list转换成树状结构

    /**
             * 将list装换成tree
             * @param {Object} myId  数据主键id
             * @param {Object} pId     数据关联的父级id
             * @param {Object} list list集合
             */
            function listToTree(myId,pId,list){
                function exists(list, parentId){
                    for(var i=0; i<list.length; i++){
                        if (list[i][myId] == parentId) return true;
                    }
                    return false;
                }
                
                var nodes = [];
                // get the top level nodes
                for(var i=0; i<list.length; i++){
                    var row = list[i];
                    if (!exists(list, row[pId])){
                        nodes.push(row);
                    }
                }
                
                var toDo = [];
                for(var i=0; i<nodes.length; i++){
                    toDo.push(nodes[i]);
                }
                while(toDo.length){
                    var node = toDo.shift();    // the parent node
                    // get the children nodes
                    for(var i=0; i<list.length; i++){
                        var row = list[i];
                        if (row[pId] == node[myId]){
                            //var child = {id:row.id,text:row.name};
                            if (node.children){
                                node.children.push(row);
                            } else {
                                node.children = [row];
                            }
                            toDo.push(row);
                        }
                    }
                }
                return nodes;
            }
            
            var list=[
                {"ids":1,"parendId":0,"name":"Foods",url:"wwww"},
                {"ids":2,"parentId":1,"name":"Fruits"},
                {"ids":3,"parentId":1,"name":"Vegetables"},
                {"ids":4,"parentId":2,"name":"apple"},
                {"ids":5,"parentId":2,"name":"orange"},
                {"ids":6,"parentId":3,"name":"tomato"},
                {"ids":7,"parentId":3,"name":"carrot"},
                {"ids":8,"parentId":3,"name":"cabbage"},
                {"ids":9,"parentId":3,"name":"potato"},
                {"ids":10,"parentId":3,"name":"lettuce"},
                
                {"ids":11,"parendId":0,"name":"Foods"},
                {"ids":12,"parentId":11,"name":"Fruits"},
                {"ids":13,"parentId":11,"name":"Vegetables"},
                {"ids":14,"parentId":12,"name":"apple"},
                {"ids":15,"parentId":12,"name":"orange"},
                {"ids":16,"parentId":13,"name":"tomato"},
                {"ids":17,"parentId":13,"name":"carrot"},
                {"ids":18,"parentId":13,"name":"cabbage"},
                {"ids":19,"parentId":13,"name":"potato"},
                {"ids":20,"parentId":13,"name":"lettuce"}
            ];
            
          console.log(JSON.stringify(listToTree("ids","parentId",list)));
          console.log(listToTree("ids","parentId",list));

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

  • 相关阅读:
    python中多进程+协程的使用以及为什么要用它
    python爬虫——多线程+协程(threading+gevent)
    Python几种并发实现方案的性能比较
    Python threadpool传递参数
    python线程池(threadpool)模块使用笔记
    python下的select模块使用 以及epoll与select、poll的区别
    python中的select模块
    Python中threading的join和setDaemon的区别及用法
    python队列Queue
    和为S的连续正数序列
  • 原文地址:https://www.cnblogs.com/guoyansi19900907/p/7490160.html
Copyright © 2011-2022 走看看