【发布时间】:2021-02-17 02:23:22
【问题描述】:
我有一些表示为父子关系数组的树结构数据:
const tree = [{id:0, parent:-1},
{id:1, parent:0},
{id:2, parent:0},
{id:3, parent:1},
{id:4, parent:2},
{id:5, parent:2},
{id:6, parent:2}]
这会产生以下树:
-0
|-1
|-3
|-2
|-4
|-5
|-6
我想让树“可排序”,以便可以操纵节点子节点的顺序,例如节点 2 的子节点可以重新排序为 5,4,6,如下所示:
-0
|-1
|-3
|-2
|-5
|-4
|-6
哪种数据结构最有利于实现这一点?
我能想到的唯一两种可能性是嵌套结构:
const nested = [
{
id:0,
children: [
{
id: 1,
children: [{id: 3, children:[]}]
},
{
id:2,
children: [
{
id:4, children:[]
},
{
id:5, children:[]
},
{
id:6, children:[]
}
]
}
]
}
]
这需要使用递归函数,它的性能似乎不如上面父子关系数组的平面结构。
或者,我可以将子订单作为数组显式存储在父子关系数组中的父项中:
const tree2 = [{id:0, parent:-1, children=[1,2]},
{id:1, parent:0, children=[3]},
{id:2, parent:0, children=[4,5,6]},
{id:3, parent:1, children=[]},
{id:4, parent:2, children=[]},
{id:5, parent:2, children=[]},
{id:6, parent:2, children=[]}]
但我不确定这有多正确,因为 children 数组是冗余信息。
【问题讨论】:
-
下面有一些答案。你看过他们吗?
标签: javascript data-structures tree data-manipulation hierarchical-data