对不起令人困惑的标题...我不知道更好的夏日。
我有一个对象数组。其中一些对象引用了它的父对象。这样的事情:
data:
[
{id: 2, parent: 1},
{id: 1},
{id: 3, parent: 1},
{id: 5, parent: 3},
{id: 4, parent: 3},
{id: 6, parent: 2}
]
我想要做的是从这个数组中创建一个Object,其中子对象嵌套在父对象中。像那样:
data: {
id: 1,
children: [
{
id:2,
children: [
{id: 6}
]
},
{
id:3,
children: [
{id: 4},
{id: 5}
]
}
]
}
有谁知道这样做的聪明方法? 我知道我必须通过这个数组的每个对象来检查并检查是否有父对象。但是我怎样才能真正创建这个对象?
答案 0 :(得分:2)
不确定这是最好的方法,但至少它是一种方法。
id
(nodes
)。root
节点(没有parent
的单个节点)。node
是否有parent
(除root
以外的每个节点都为真。)parent
节点。parent.children
数组,或者如果它尚不存在则创建它。node
添加到该阵列。parent
的{{1}}属性。请注意,这会更改node
对象中的原始节点对象。这是故意的,因为树是通过存储对父节点中其他节点的引用来构建的。如果需要保持data
中的原始节点不变,则应在构建查找表时克隆节点对象。例如,您可以在查找data
循环中添加node = $.extend({}, node);
作为第一行(使用jQuery时)。
这是一个实现和demonstration:
forEach