递归生成树

var data = [
{id:1,title:'a',pid:0},
{id:2,title:'a1',pid:1},
{id:3,title:'a11',pid:2},
{id:4,title:'a12',pid:2},
{id:5,title:'a2',pid:1},
{id:6,title:'a21',pid:5}
];
function fn(data,pid){
     var result = [] , temp;
     for(var i in data){
          if(data[i].pid==pid){
               result.push(data[i]);
               temp = fn(data,data[i].id);
               if(temp.length>0){
                       data[i].children=temp;
                }
         }
    }
return result;
}

 

 

1.定义函数体:

            这个函数体有返回值:result 每一次计算出来的结果

            有形参: data,pid 这个形参是关键因素,因为递归的形参

            对形参处理: 对形参进行计算,从而形成结果返回

            函数体回调: 将参数传进来 fn(ag1,ag2)

            for循环: 对每一个树进行递归           

           将结果赋值或者有一定的含义,

           判断if: 判断是否进行递归

2.有停止回调的条件

 

posted @ 2017-03-31 14:25  jay-  阅读(438)  评论(0编辑  收藏  举报