后台获得json格式数据如下:
[
{"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}
]
求前端用js递归为树状jsonObj。
注1:可以使用jquery
注2:最终结果用于easyui 的tree。若格式按照tree的Data格式更佳

解决方案 »

  1.   

    期望结果下:
    [
    {"id":2,"text":"第一级1","children":[
    {"id":3,"text":"第二级1","children":[
    {"id":5,"text":"第三级2"}
    ]},
    {"id":4,"text":"第二级2","children":[
    {"id":6,"text":"第三级1"}
    ]}
    ]}
    ]
    注:title不替换为text亦可。
      

  2.   


    function gettree(nodes) {
    return (function(nodes, parentid) {
    var cn = [];
    for (var i = 0; i < nodes.length; i++) {
    var n = nodes[i];
    n.text=n.title;
    n.children = arguments.callee(nodes, n.id);
    cn.push(n);
    }
    return cn;
    })(nodes, 0);
    }
      

  3.   

    stack size exceeded
    溢出了
      

  4.   

    溢出的话这样试试function gettree(nodes) {
     var gc = function(parentid) {
      var cn = [];
      for (var i = 0; i < nodes.length; i++) {
       var n = nodes[i];
       n.text=n.title;
       n.children = gc(n.id);
       cn.push(n);
      }
      return cn;
     }
     return gc(0); 
    }
      

  5.   

    啊 我写错了
    溢出的话这样试试function gettree(nodes) {
     var gc = function(parentid) {
      var cn = [];
      for (var i = 0; i < nodes.length; i++) {
      var n = nodes[i];
      //刚才忘了写这句
      if(n.parentid===parentid){
        n.text=n.title;
        n.children = gc(n.id);
        cn.push(n);
       }
      }
      return cn;
     }
     return gc(0);  
    }
      

  6.   

    <script>
    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}
    ]
    function gettree(nodes) {
     var gc = function(parentid) {
      var cn = [];
      for (var i = 0; i < nodes.length; i++) {
      var n = nodes[i];
      if(n.parentid===parentid){
      n.text=n.title;
      n.children = gc(n.id);
      cn.push(n);
      }
      }
      return cn;
     }
     return gc(0);   
    }var newnodes = gettree(nodes);
     //alert($.encode(newnodes));
    </script>这么写试试,没溢出啊(刚才溢出是因为我写了个死循环。已经改正了)