js 数组获取树形数据递归
时间: 2023-12-09 09:03:02 浏览: 83
JavaScript递归算法生成树形菜单
5星 · 资源好评率100%
获取树形数据的递归算法可以使用深度优先遍历(DFS)或广度优先遍历(BFS)。以下是使用 DFS 的实现示例:
```javascript
function getTreeList(treeData, parentId = null) {
const result = [];
for (let i = 0; i < treeData.length; i++) {
const node = treeData[i];
if (node.parentId === parentId) {
const children = getTreeList(treeData, node.id);
if (children.length) {
node.children = children;
}
result.push(node);
}
}
return result;
}
```
其中,`treeData` 是原始的树形数据,`parentId` 是当前节点的父节点 ID。首先创建一个空数组 `result`,然后遍历原始数据,找到所有父节点 ID 为当前节点 ID 的子节点,并递归获取子节点的子节点,直到没有子节点为止。如果当前节点有子节点,则将子节点数组添加到当前节点的 `children` 属性中,最后将当前节点添加到 `result` 数组中并返回。
使用示例:
```javascript
const treeData = [
{ id: 1, name: 'Node 1', parentId: null },
{ id: 2, name: 'Node 2', parentId: 1 },
{ id: 3, name: 'Node 3', parentId: 1 },
{ id: 4, name: 'Node 4', parentId: 2 },
{ id: 5, name: 'Node 5', parentId: 3 },
{ id: 6, name: 'Node 6', parentId: null },
{ id: 7, name: 'Node 7', parentId: 6 },
];
const treeList = getTreeList(treeData);
console.log(treeList);
```
输出结果:
```
[
{
"id": 1,
"name": "Node 1",
"parentId": null,
"children": [
{
"id": 2,
"name": "Node 2",
"parentId": 1,
"children": [
{
"id": 4,
"name": "Node 4",
"parentId": 2
}
]
},
{
"id": 3,
"name": "Node 3",
"parentId": 1,
"children": [
{
"id": 5,
"name": "Node 5",
"parentId": 3
}
]
}
]
},
{
"id": 6,
"name": "Node 6",
"parentId": null,
"children": [
{
"id": 7,
"name": "Node 7",
"parentId": 6
}
]
}
]
```
阅读全文