用js实现简单数据格式的无限级分类

代码如下:

/**
*将简单格式的数据 转换为树形结构数据。
**/
function formatTreeData(){
    //测试数据
    var data=[{id:1,name:'a',pid:0},
                   {id:2,name:'b',pid:1},
                   {id:3,name:'c',pid:1},
                   {id:4,name:'d',pid:0},
                   {id:5,name:'e',pid:2},
                   {id:6,name:'f',pid:0},
                   {id:7,name:'g',pid:4},
                   {id:8,name:'h',pid:5},
                   {id:9,name:'i',pid:8},
                   {id:10,name:'h',pid:9}
        ];
    var r=[];
    var tmpMap=[];
    for(var i=0;i<data.length;i++){
       tmpMap[data[i]["id"]]=data[i];   
    }
      for (i = 0, l = data.length; i < l; i++) {
                    if (tmpMap[data[i]["pid"]] && data[i]["id"] != data[i]["pid"]) {
                        if (!tmpMap[data[i]["pid"]]["children"])
                            tmpMap[data[i]["pid"]]["children"] = [];
                        tmpMap[data[i]["pid"]]["children"].push(data[i]);
                    } else {
                        r.push(data[i]);
                    }
                }
   
       //将数据封装成层级数组
        var haha=formatArray(r,"");
    console.log(r);
    console.log("----------");

    console.log(haha.reverse());
   
   
}


/**
*用递归函数将数据封装成层级数组
*/
function formatArray(r,m){
    var haha=[];
    m+="-";
    for(var j=0;j<r.length;j++){
     var ele={};
     ele.id=r[j].id;
     ele.name=m+r[j].name;
     ele.pid=r[j].pid;
    if(r[j].children){
      ele.isParent=true;
      haha=haha.concat(formatArray(r[j].children,m));
    }
         haha.push(ele);   
    }
   
    return haha;
}

你可能感兴趣的:(js,分类,树形)