### 写一个函数flatToTree(),将扁平化数据转成json树形结构 ``` let flatArr = [ {id: 1, title: "A", parent_id: -1}, {id: 2, title: 'B', parent_id: -1}, {id: 3, title: 'C', parent_id: 2}, {id: 4, title: 'D', parent_id: 3}, ] ```
时间: 2024-02-18 08:05:00 浏览: 24
好的,以下是实现 `flatToTree()` 函数的代码:
```javascript
function flatToTree(flatArr) {
let tree = [];
// 以 id 为键,将每个节点存入 lookup 表
let lookup = {};
flatArr.forEach(item => {
lookup[item.id] = { id: item.id, title: item.title, children: [] };
});
// 遍历 flatArr ,将每个节点添加到其父节点的 children 属性中
flatArr.forEach(item => {
if (item.parent_id === -1) {
// 根节点
tree.push(lookup[item.id]);
} else {
lookup[item.parent_id].children.push(lookup[item.id]);
}
});
return tree;
}
// 示例数据
let flatArr = [
{ id: 1, title: "A", parent_id: -1 },
{ id: 2, title: "B", parent_id: -1 },
{ id: 3, title: "C", parent_id: 2 },
{ id: 4, title: "D", parent_id: 3 }
];
// 转换为 json 树形结构
let tree = flatToTree(flatArr);
console.log(tree);
```
输出结果如下:
```
[
{
"id": 1,
"title": "A",
"children": []
},
{
"id": 2,
"title": "B",
"children": [
{
"id": 3,
"title": "C",
"children": [
{
"id": 4,
"title": "D",
"children": []
}
]
}
]
}
]
```
上面的实现思路是:
1. 遍历 `flatArr` ,将每个节点存入以 `id` 为键的 `lookup` 表中,以便后续查找父节点使用。
2. 再次遍历 `flatArr` ,找到每个节点的父节点,并将其添加到父节点的 `children` 属性中。
3. 如果某个节点的 `parent_id` 为 -1 ,则将其作为根节点,添加到输出结果 `tree` 数组中。
这样,就可以将扁平化数据转换为 json 树形结构了。