這篇文章主要介紹了使用JavaScript怎么將線性數據轉換為樹形數據,億速云小編覺得不錯,現在分享給大家,也給大家做個參考,一起跟隨億速云小編來看看吧!
Java是一門面向對象編程語言,可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序。
數據結構
下面是我們轉換前的數據:
[
{
"id":1,
"parent_id":0,
"name":"四川省"
},
{
"id":2,
"parent_id":0,
"name":"廣東省"
},
{
"id":3,
"parent_id":0,
"name":"江西省"
},
{
"id":5,
"parent_id":1,
"name":"成都市"
},
{
"id":6,
"parent_id":5,
"name":"錦江區"
},
{
"id":7,
"parent_id":6,
"name":"九眼橋"
},
{
"id":8,
"parent_id":6,
"name":"蘭桂坊"
},
{
"id":9,
"parent_id":2,
"name":"東莞市"
},
{
"id":10,
"parent_id":9,
"name":"長安鎮"
},
{
"id":11,
"parent_id":3,
"name":"南昌市"
}
]我們轉換后的結果是:
[
{
"id":1,
"parent_id":0,
"name":"四川省",
"children":[
{
"id":5,
"parent_id":1,
"name":"成都市",
"children":[
{
"id":6,
"parent_id":5,
"name":"錦江區",
"children":[
{
"id":7,
"parent_id":6,
"name":"九眼橋"
},
{
"id":8,
"parent_id":6,
"name":"蘭桂坊"
}
]
}
]
}
]
},
{
"id":2,
"parent_id":0,
"name":"廣東省",
"children":[
{
"id":9,
"parent_id":2,
"name":"東莞市",
"children":[
{
"id":10,
"parent_id":9,
"name":"長安鎮"
}
]
}
]
},
{
"id":3,
"parent_id":0,
"name":"江西省",
"children":[
{
"id":11,
"parent_id":3,
"name":"南昌市"
}
]
}
]實現代碼
let array = [
{
id: 1,
parent_id: 0,
name: "四川省"
},
{
id: 2,
parent_id: 0,
name: "廣東省"
},
{
id: 3,
parent_id: 0,
name: "江西省"
},
{
id: 5,
parent_id: 1,
name: "成都市"
},
{
id: 6,
parent_id: 5,
name: "錦江區"
},
{
id: 7,
parent_id: 6,
name: "九眼橋"
},
{
id: 8,
parent_id: 6,
name: "蘭桂坊"
},
{
id: 9,
parent_id: 2,
name: "東莞市"
},
{
id: 10,
parent_id: 9,
name: "長安鎮"
},
{
id: 11,
parent_id: 3,
name: "南昌市"
}
]
function listToTree(list) {
let map = {};
list.forEach(item => {
if (! map[item.id]) {
map[item.id] = item;
}
});
list.forEach(item => {
if (item.parent_id !== 0) {
map[item.parent_id].children ? map[item.parent_id].children.push(item) : map[item.parent_id].children = [item];
}
});
return list.filter(item => {
if (item.parent_id === 0) {
return item;
}
})
}
console.log(listToTree(array));分析
這段代碼的核心就在 listToTree 方法中,這個方法分為了三個部分:
第一部分
第一部分先將數組中的所有元素都復制到 map 中(注意:這里是引用復制哦,這個細節很重要)。
第二部分
執行第二次遍歷前的 map:
// map
{
...,
"3":{
"id":3,
"parent_id":0,
"name":"江西省"
},
...
}然后這個時候遍歷 parent_id 不等于 0 的元素:
[
...,
{
id: 11,
parent_id: 3,
name: "南昌市"
},
...
]然后發現南昌市有 parent_id,我們再給 map[item.parent_id] 設置子元素,通過南昌市的 parent_id 可以推導出:
map["3"].children ? map["3"].children.push(item) : map[3].children = [item];
上面的代碼判斷了是否存在 children,如果不存在則直接給它賦值,否則將值 push 到 children 中。
執行完第二步后,我們已經把子節點添加到了它的父節點上,但是我們并沒有刪除掉之前的子節點。所以第三部就是對數據進行過濾,只要父節點即可。

以上就是億速云小編為大家收集整理的使用JavaScript怎么將線性數據轉換為樹形數據,如何覺得億速云網站的內容還不錯,歡迎將億速云網站推薦給身邊好友。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。