帮我用js写一个树形结构的权限管理数组处理过程
时间: 2024-05-10 07:20:03 浏览: 73
假设我们有一个权限管理数组,每个权限对象包含id、name、parentId和children属性,如下所示:
```javascript
const permissions = [
{ id: 1, name: '用户管理', parentId: 0, children: [
{ id: 2, name: '添加用户', parentId: 1, children: [] },
{ id: 3, name: '删除用户', parentId: 1, children: [] },
{ id: 4, name: '修改用户', parentId: 1, children: [] }
]},
{ id: 5, name: '角色管理', parentId: 0, children: [
{ id: 6, name: '添加角色', parentId: 5, children: [] },
{ id: 7, name: '删除角色', parentId: 5, children: [] },
{ id: 8, name: '修改角色', parentId: 5, children: [] }
]}
];
```
我们想要把这个数组转换成一个树形结构,可以使用递归的方式处理每个节点和它的子节点。下面是一个示例函数:
```javascript
function buildTree(permissions, parentId) {
const tree = [];
for (let i = 0; i < permissions.length; i++) {
const permission = permissions[i];
if (permission.parentId === parentId) {
const node = { id: permission.id, name: permission.name, children: [] };
const children = buildTree(permissions, permission.id);
if (children.length > 0) {
node.children = children;
}
tree.push(node);
}
}
return tree;
}
```
这个函数使用一个parentId参数来指定当前节点的父节点id。它遍历整个权限管理数组,找到所有parentId等于当前parentId的权限对象,将它们转换成树节点,并递归处理它们的子节点。处理完所有子节点后,将它们作为当前节点的children属性,最后返回当前节点数组。
我们可以调用这个函数来生成树形结构:
```javascript
const tree = buildTree(permissions, 0);
console.log(tree);
```
输出结果如下:
```javascript
[
{
"id": 1,
"name": "用户管理",
"children": [
{
"id": 2,
"name": "添加用户",
"children": []
},
{
"id": 3,
"name": "删除用户",
"children": []
},
{
"id": 4,
"name": "修改用户",
"children": []
}
]
},
{
"id": 5,
"name": "角色管理",
"children": [
{
"id": 6,
"name": "添加角色",
"children": []
},
{
"id": 7,
"name": "删除角色",
"children": []
},
{
"id": 8,
"name": "修改角色",
"children": []
}
]
}
]
```
这样我们就成功地将一个权限管理数组转换成了一个树形结构。如果需要在页面上展示这个树形结构,可以使用递归的方式遍历每个节点,并使用DOM操作来创建相应的HTML元素。
阅读全文