JSON是一種輕量級的數據交換格式,而樹狀數組是一種常用的樹形數據結構。有時候我們需要將JSON扁平數組轉換成樹狀數組,以便于處理和展示。本文將介紹如何實現這一操作。
首先,我們需要了解JSON扁平數組和樹狀數組的概念。JSON扁平數組指的是沒有父子關系的平鋪式JSON數據,樹狀數組則是有父子關系的樹形數據結構。例如,以下是一個JSON扁平數組:
{ "id": 1, "name": "父節點", "pid": 0 }, { "id": 2, "name": "子節點1", "pid": 1 }, { "id": 3, "name": "子節點2", "pid": 1 }
以上JSON扁平數組包含了3個節點,其中第一個節點為根節點,沒有父節點,而其他兩個節點都有父節點。下面是一個相應的樹狀數組:
{ "id": 1, "name": "父節點", "children": [ { "id": 2, "name": "子節點1" }, { "id": 3, "name": "子節點2" } ] }
可以看到,樹狀數組中的第一個節點為根節點,其余節點被作為其父節點的children屬性值存儲。
現在我們開始轉換。首先,我們需要將JSON扁平數組中的每個節點轉換為具有父子關系的節點對象。我們可以使用一個循環來實現:
var map = {}; var node; var roots = []; for (var i = 0; i < array.length; i++) { node = array[i]; node.children = []; map[node.id] = i; if (node.pid === 0) { roots.push(node); } else { array[map[node.pid]].children.push(node); } }
以上代碼首先定義了一個map對象,用于存儲每個節點的索引位置。然后,在循環中我們為每個節點增加了一個children屬性,并在map對象中存儲該節點的索引。如果該節點沒有父節點,將其添加到roots數組中。如果該節點有父節點,找到其父節點的索引,并將其添加到父節點的children屬性中。
現在,我們已經將JSON扁平數組成功轉換成了樹狀數組,可以通過roots數組來遍歷整個樹結構。如果需要進一步操作,可以在node對象上添加其他屬性或方法。