[英]Convert an Array to Tree in Typescript
我在這樣存儲的對象數組中有結構數據庫:
arry = [{"name": "a", "id": "2", "data":"foo", "parent": "1"},
{"name": "b", "id": "3", "data":"foo", "parent": "2"},
{"name": "c", "id": "4", "data":"foo", "parent": "3"},
{"name": "d", "id": "5", "data":"foo", "parent": "3"},
{"name": "e", "id": "6", "data":"foo", "parent": "4"},
{"name": "f", "id": "7", "data":"foo", "parent": "5"}]
我想要這樣的嵌套結構
{
"2":{
"name": "a",
"data": "foo",
"3":{
"name": "b",
"data":"foo",
"4":{
"name": "c",
"data":"foo",
"6":{
"name": "e",
"data": "foo",
};
},
"5":{
"name": "d",
"data": "foo",
"7":{
"name": "f",
"data": "foo"
}
}
}
}
};
所以我可以使用它Angular Material樹。
為此,您可以使用每個節點的id
作為索引,將節點數組簡化為字典。
這樣,您將可以通過字典的ID直接訪問所有節點。 因此,您將能夠輕松地將每個節點存儲在其父節點中。
一旦所有節點都存儲在各自的父節點中,您只需從字典中獲取根節點,它將保存您所有的樹。
解析子級時,可能會發生父級不在字典中的情況,在這種情況下,您可以使用一個虛擬對象,該對象將在我們解析實際父級節點時扮演一個占位符。
var arry = [ {"name": "a", "id": "2", "data":"foo", "parent": "1"}, {"name": "b", "id": "3", "data":"foo", "parent": "2"}, {"name": "c", "id": "4", "data":"foo", "parent": "3"}, {"name": "d", "id": "5", "data":"foo", "parent": "3"}, {"name": "e", "id": "6", "data":"foo", "parent": "4"}, {"name": "f", "id": "7", "data":"foo", "parent": "5"} ]; function totree(branches, node) { // if we don't have the parent yet if (!branches[node.parent]) { // create a dummy placeholder for now branches[node.parent] = {}; } // store our node in its parent branches[node.parent][node.id] = node; // store our node in the full list // copy all added branches on possible placeholder branches[node.id] = Object.assign(node, branches[node.id]); return branches; } var tree = arry.reduce(totree, {})['1']; // get only the root node ('1') console.log(tree);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.