js把屬性具有父子關係的json檔案轉變成json樹
阿新 • • 發佈:2019-02-03
方法也是百度來的,親測可用
希望能幫助到大家
<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>