/**
* 数组转树形结构
* @param list 源数组
* @param tree 树
* @param parentId 父ID
*/
const listToTree = (list, tree, parentId) => {
list.forEach(item => {
// 判断是否为父级菜单
if (item.parentId === parentId) {
const child = {
...item,
key: item.key || item.name,
children: []
}
// 迭代 list, 找到当前菜单相符合的所有子菜单
listToTree(list, child.children, item.id)
// 删掉不存在 children 值的属性
if (child.children.length <= 0) {
delete child.children
}
// 加入到树中
tree.push(child)
}
})
}
数据源,把相同的父节点parentId合并children中
const nav = [
{
name: 'WorkBench',
parentId: 0,
id: 100,
meta: {
title: '工作台',
icon: 'appstore',
show: true
},
component: 'WorkBench'
},
{
name: 'TaskCenter',
parentId: 0,
id: 200,
meta: {
title: '任务中心',
icon: 'clock-circle',
show: true
},
component: 'TaskCenter'
},
{
name: 'ParameterManagement',
parentId: 0,
id: 300,
meta: {
title: '标题1',
icon: 'box-plot',
show: true
// hideChildren: true
},
component: 'RouteView',
redirect: '/ParameterManagement/InterfaceManagement'
},
{
name: 'InterfaceManagement',
parentId: 300,
id: 301,
meta: {
title: '接口管理',
icon: 'align-left',
show: true
},
component: 'InterfaceManagement'
},
{
name: 'DatabaseManagement',
parentId: 300,
id: 302,
meta: {
title: '标题',
icon: 'bar-chart',
show: true
},
component: 'DatabaseManagement'
},
{
name: 'IndicatorLibrary',
parentId: 0,
id: 400,
meta: {
title: '指标库',
icon: 'bar-chart',
show: true
},
component: 'IndicatorLibrary'
}
]
使用
// nav数据源,空数组,父节点0
listToTree(nav, [], 0)