一个菜单表,里面有menu_id和parent_id,现在通过sql查出了所有数据,如何通过后端拦截器把他变成树形结构
时间: 2023-05-15 08:08:01 浏览: 139
可以使用递归的方式将菜单表转换成树形结构。首先,将所有的菜单数据按照 parent_id 进行分组,然后从根节点开始递归遍历每个节点,将其子节点添加到对应的父节点下面。最后返回根节点即可。
以下是示例代码:
```python
def build_menu_tree(menu_list):
# 将菜单按照 parent_id 进行分组
menu_dict = {}
for menu in menu_list:
parent_id = menu['parent_id']
if parent_id not in menu_dict:
menu_dict[parent_id] = []
menu_dict[parent_id].append(menu)
# 递归构建树形结构
def build_tree(parent_id):
children = menu_dict.get(parent_id, [])
for child in children:
child['children'] = build_tree(child['menu_id'])
return children
# 返回根节点
return build_tree(None)
```
在后端拦截器中,可以先查询出所有菜单数据,然后调用上述函数将其转换成树形结构,最后将树形结构返回给前端。
相关问题
一个菜单表,里面有menu_id和parent_id,现在通过sql查出菜单表所有数据,如何通过springboot后端拦截器把他变成树形结构,
可以通过以下步骤将菜单表数据转换为树形结构:
1. 查询所有菜单数据,并按照parent_id排序。
2. 创建一个空的树形结构,用于存储转换后的数据。
3. 遍历所有菜单数据,将每个菜单节点插入到树形结构中。
4. 对于每个菜单节点,查找其父节点,并将其插入到父节点的子节点列表中。
5. 返回转换后的树形结构。
在Spring Boot后端拦截器中,可以在请求处理前或处理后执行上述转换操作,并将转换后的树形结构存储在请求属性中,以便后续的请求处理程序使用。
一个菜单表,里面有menu_id和parent_id,现在通过sql查出菜单表所有数据,如何通过后端拦截器把他变成树形结构,然后传到前端变成树形表格
可以通过递归的方式将菜单表的数据转换成树形结构,具体实现可以参考以下步骤:
1. 从数据库中查询出所有菜单数据,存储到一个列表中。
2. 定义一个字典,用于存储每个菜单的子菜单列表。
3. 遍历菜单列表,将每个菜单的子菜单添加到字典中对应的列表中。
4. 遍历菜单列表,对于每个菜单,如果它没有父菜单,则将它作为根节点,递归地将其子菜单添加到根节点下。
5. 将根节点列表返回给前端,前端可以使用树形表格插件将其展示成树形结构。
以下是一个示例代码:
```python
def build_menu_tree(menu_list):
# 定义一个字典,用于存储每个菜单的子菜单列表
menu_dict = {}
for menu in menu_list:
parent_id = menu['parent_id']
if parent_id not in menu_dict:
menu_dict[parent_id] = []
menu_dict[parent_id].append(menu)
# 递归构建树形结构
def build_tree(parent_id):
tree = []
if parent_id in menu_dict:
for menu in menu_dict[parent_id]:
menu['children'] = build_tree(menu['menu_id'])
tree.append(menu)
return tree
# 构建所有根节点
root_nodes = []
for menu in menu_list:
if menu['parent_id'] is None:
menu['children'] = build_tree(menu['menu_id'])
root_nodes.append(menu)
return root_nodes
```
在后端拦截器中调用该函数,将菜单列表转换成树形结构后,将其作为响应数据返回给前端即可。
阅读全文
相关推荐










