扁平化数据结构转成树形数据结构 使用递归方法
时间: 2023-10-17 10:19:13 浏览: 127
把扁平化的数据转换成树形结构的JSON,把树形JSON扁平化.zip
假设现有一个扁平化的数据结构,其中每个节点包含id、parentId和name三个属性,表示该节点的唯一标识、父节点的唯一标识和节点名称。现在需要将这个扁平化的数据结构转换成树形数据结构。
可以使用递归方法来实现。具体步骤如下:
1. 定义一个递归函数,参数为当前节点的id和整个扁平化数据结构。
2. 在递归函数中,遍历整个扁平化数据结构,查找所有父节点为当前节点id的节点,并将这些节点作为当前节点的子节点。
3. 对于每个子节点,递归调用该函数,参数为子节点的id和整个扁平化数据结构。
4. 递归函数返回当前节点及其所有子节点构成的树形数据结构。
代码实现如下:
```
function flattenToTree(id, data) {
var tree = {id: id, name: '', children: []};
for (var i = 0; i < data.length; i++) {
if (data[i].parentId == id) {
var child = {id: data[i].id, name: data[i].name, children: []};
tree.children.push(child);
var subChildren = flattenToTree(data[i].id, data);
if (subChildren.children.length > 0) {
child.children = subChildren.children;
}
}
}
return tree;
}
```
调用该函数的示例代码如下:
```
var data = [
{id: 1, parentId: 0, name: 'A'},
{id: 2, parentId: 1, name: 'B'},
{id: 3, parentId: 1, name: 'C'},
{id: 4, parentId: 2, name: 'D'},
{id: 5, parentId: 2, name: 'E'},
{id: 6, parentId: 3, name: 'F'}
];
var tree = flattenToTree(1, data);
console.log(tree);
```
输出结果为:
```
{
id: 1,
name: '',
children: [
{
id: 2,
name: 'B',
children: [
{id: 4, name: 'D', children: []},
{id: 5, name: 'E', children: []}
]
},
{
id: 3,
name: 'C',
children: [
{id: 6, name: 'F', children: []}
]
}
]
}
```
阅读全文