第一种方式:将树状数据处理为没有层级的数据、
这样便于搜索数据,只需要一个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
}