[英]Build a tree from a flat array
我面臨着從平面陣列構建樹的問題。 我們有一個數組。
[
{
"h1": "h001",
"h2": "z001"
},
{
"h1": "h002",
"h2": "z002"
},
{
"h1": "h003",
"h2": "z003"
}
]
我想得到這樣的東西:
[{
"h1": "h001",
"h2": "z001",
"children": {
"h1": "h002",
"h2": "z002",
"children": {
"h1": "h003",
"h2": "z003"
}
}
}]
有沒有辦法實現這個?
謝謝!
這將是使用數組map()
方法的好地方。 本質上,我們將使用slice()
對數組進行淺拷貝,然后對其進行reverse()
,然后將每個 object 設為children
屬性下的前一個對象的屬性。 完成后,我們 re reverse()
數組以獲取原始訂單並獲取第一項。
let values = [{ "h1": "h001", "h2": "z001" }, { "h1": "h002", "h2": "z002" }, { "h1": "h003", "h2": "z003" }]; let newValues = values.slice().reverse().map((e,i,a) => i? (a[i] = {...e, children: a[i-1] }): a[i]).reverse()[0]; console.log(newValues);
這輸出:
{
"h1": "h001",
"h2": "z001",
"children": {
"h1": "h002",
"h2": "z002",
"children": {
"h1": "h003",
"h2": "z003"
}
}
}
通過那里的索引迭代並將下一個節點添加到前一個索引。
執行:
const nodes = [{ "h1": "h001", "h2": "z001" }, { "h1": "h002", "h2": "z002" }, { "h1": "h003", "h2": "z003" }]; for (let i = 1; i < nodes.length; i++) { nodes[i - 1].children = nodes[i]; } console.log('solutionByIndex', nodes[0]);
您可以使用遞歸:
function to_tree(vals){ var v = vals.shift() return vals.length? {...v, children:to_tree(vals)}: v } var vals = [{ "h1": "h001", "h2": "z001" }, { "h1": "h002", "h2": "z002" }, { "h1": "h003", "h2": "z003" }]; console.log([to_tree(vals)])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.