一个json 数组转tree

来源:互联网 发布:算法分析 编辑:程序博客网 时间:2024/06/10 20:52
1.递归
一个json 数组
var nodes = [
{"id":2,"title":"第一级1","parentid":0},
{"id":3,"title":"第二级1","parentid":2},
{"id":4,"title":"第二级2","parentid":2},
{"id":5,"title":"第三级1","parentid":4},
{"id":6,"title":"第三级2","parentid":3}
];
如何用递归的方式

转成

var newnode = {
                id:"2",
                title:"第一级1",
               children:[
                           {
                             id:"3",
                             title:"第二级1",
                             children:[
                                        {
                                            id:"6",
                                            title:"第三级2",
                                            children:[]
                                        }
                                        ]
                            },
                           {
                             id:"4",
                             title:"第二级2",
                             children:[
                                         {
                                            id:"5",
                                            title:"第三级1",
                                            children:[]
                                         }
                                        ]
                            }
                         ]
              }



递归算法


 function fn(data, parentid) {
    var result = [], temp;
    for (var i = 0; i < data.length; i++) {
        if (data[i].parentid== parentid) {
            var obj = {"text": data[i].name,"id": data[i].id};
            temp = fn(data, data[i].id);
            if (temp.length > 0) {
                obj.children = temp;
            }
            result.push(obj);
        }
    }
    return result;

}


2.for循环

[
 {"id":1,"parendId":0,"name":"系统管理","url":"chart/list1.html"},
 {"id":2,"parentId":1,"name":"Fruits","url":"chart/list1.html"},
 {"id":3,"parentId":1,"name":"Vegetables"},
 {"id":4,"parentId":2,"name":"apple"},
 {"id":5,"parentId":2,"name":"orange","url":"chart/list1.html"},
 {"id":6,"parentId":3,"name":"tomato"},
 {"id":7,"parentId":3,"name":"carrot"},
 {"id":8,"parentId":3,"name":"cabbage"},
 {"id":9,"parentId":3,"name":"potato"},
 {"id":10,"parentId":3,"name":"lettuce"}
 ]

那么如何将url添加到tree中呢?

  function convert(rows){
          function exists(rows, parentId){
              for(var i=0; i<rows.length; i++){
                  if (rows[i].id == parentId) return true;
              }
              return false;
          }
          
          var nodes = [];
         // 获取顶级的node
         for(var i=0; i<rows.length; i++){
            var row = rows[i];
             if (!exists(rows, row.parentId)){
                /**
                 gys    给顶层添加链接
                 **/
                 var topNode={id:row.id,text:row.name,url:row.url};                
                 nodes.push(topNode);
                 
                 /* nodes.push({
                     id:row.id,
                     text:row.name
                 }); */
             }
         }
         
         var toDo = [];
         for(var i=0; i<nodes.length; i++){
             toDo.push(nodes[i]);
         }
         while(toDo.length){//循环toDo当toDo长度为零时停止
             var node = toDo.shift();//删除第一个元素,然后返回第一个元素,改变数组长度    
            // 获取子节点
             for(var i=0; i<rows.length; i++){
                 var row = rows[i];
                 if (row.parentId == node.id){
                    var child = {id:row.id,text:row.name};
                     /**
                     gys 添加链接
                     **/
                     if(row.url){
                         child.url=row.url;
                     }
                    if (node.children){
                       node.children.push(child);
                     } else {
                         node.children = [child];
                     }
                     toDo.push(child);
                 }
             }
         }
         return nodes;
     }

原创粉丝点击