ReactNative

ReactNative 递归算法获取树状集合

2018-04-27  本文已影响0人  WindFlyCloud
第一种方式:将树状数据处理为没有层级的数据、

这样便于搜索数据,只需要一个filter函数就行了

需要处理的数据
var data = [
           {
               name: '中国',
               children: [
                   {
                       name: '北京',

                   },
                   {
                       name: '河南省',
                       children: [
                           {
                               name: '郑州市',
                               children: [
                                   {
                                       name: '中牟县',
                                       children: [
                                           {
                                               name: '方特欢乐园'
                                           },
                                           {
                                               name: '绿博园'
                                           }
                                       ]
                                   },
                                   {
                                       name: '太康县',
                                       children: [
                                           {
                                               name: '独塘乡'
                                           },
                                           {
                                               name: '周口市'
                                           }
                                       ]
                                   },
                                   {
                                       name: '淮阳',
                                       children: [
                                           {
                                               name: '西华'
                                           },
                                           {
                                               name: '柘城'
                                           }
                                       ]
                                   },

                               ]
                           }
                       ]
                   },
                   {
                       name: '苏州',
                       children:null
                   }
               ]
           }
       ];
处理数据的函数
    //获取树状结构中的所有子集
    getAllChildrenData(data){
        var array = [];
        for(var i = 0;i<data.length;i++){
            let obj = data[i];
            array.push(obj);
            if(obj.children != undefined && obj.children.length > 0){
                // console.log(obj.name);
              array = array.concat(this.getAllChildrenData(obj.children,false));//递归算法
            }
        }
        return array;
    }

第二种:将集合转化为树状结构

            var data = [
                {"id":2,"name":"第一级1","pid":0},
                {"id":3,"name":"第二级1","pid":2},
                {"id":5,"name":"第三级1","pid":4},
                {"id":100,"name":"第三级2","pid":3},
                {"id":6,"name":"第三级2","pid":3},
                {"id":601,"name":"第三级2","pid":6},
                {"id":602,"name":"第三级2","pid":6},
                {"id":603,"name":"第三级2","pid":6}
               ];
递归算法:
            function arrayToJson(treeArray){
                var r = [];
                var tmpMap ={};
               
                for (var i=0, l=treeArray.length; i<l; i++) {
                 // 以每条数据的id作为obj的key值,数据作为value值存入到一个临时对象里面
                 tmpMap[treeArray[i]["id"]]= treeArray[i]; 
                } 
               
                for (i=0, l=treeArray.length; i<l; i++) {
                 var key=tmpMap[treeArray[i]["pid"]];
                  
                 //循环每一条数据的pid,假如这个临时对象有这个key值,就代表这个key对应的数据有children,需要Push进去
                 if (key) {
                  if (!key["children"]){
                    key["children"] = [];
                    key["children"].push(treeArray[i]);
                  }else{
                   key["children"].push(treeArray[i]);
                  }    
                 } else {
                  //如果没有这个Key值,那就代表没有父级,直接放在最外层
                  r.push(treeArray[i]);
                 }
                }
                return r
                }
上一篇 下一篇

猜你喜欢

热点阅读