方法也是百度来的,亲测可用
希望能帮助到大家
<script>
var data = [{
"address": "芜湖弋江区",
"id": "1",
"latitude": 31.379996,
"longitude": 118.424139,
"name": "测试站点1",
"pId": "SK",
"siteClass": "DQ",
"siteType": "SK",
"updateDataTime": "2018-10-19 00:00:00"
}, {
"address": "芜湖三山区",
"id": "2",
"latitude": 31.369996,
"longitude": 118.414139,
"name": "测试站点2",
"pId": "GK",
"siteClass": "DQ",
"siteType": "GK",
"updateDataTime": "2018-10-19 00:00:00"
}, {
"id": "GK",
"name": "国控",
"pId": "0"
}, {
"id": "SK",
"name": "省控",
"pId": "0"
}]
function toTree(data) { // 删除 所有 children,以防止多次调用
data.forEach(function(item) {
delete item.children;
}); // 将数据存储为 以 id 为 KEY 的 map 索引数据列
var map = {};
data.forEach(function(item) {
map[item.id] = item;
}); // console.log(map);
var val = [];
data.forEach(function(item) { // 以当前遍历项,的pid,去map对象中找到索引的id
var parent = map[item.pId]; // 好绕啊,如果找到索引,那么说明此项不在顶级当中,那么需要把此项添加到,他对应的父级中
if(parent) {
(parent.children || (parent.children = [])).push(item);
} else { //如果没有在map中找到对应的索引ID,那么直接把 当前的item添加到 val结果集中,作为顶级
val.push(item);
}
});
return val;
}
console.log(toTree(data))
</script>