const menu = [{
menuId: 1000,
menuCode: '1000',
menuName: '一级菜单',
isLeaf: true,
menuUrl: '/test/product?test=1',
menuIcon: 'el-icon-s-tools',
menuSort: 0,
menuType: 1
},
{
menuId: 3000,
menuCode: '3000',
menuName: '一级菜单',
isLeaf: true,
menuUrl: '/test/product?test=2',
menuIcon: 'el-icon-s-tools',
menuSort: 0,
menuType: 1
},
{
menuId: 2000,
menuCode: '2000',
menuName: '二级菜单',
isLeaf: false,
menuUrl: '/test/product?test=3',
menuIcon: 'el-icon-s-tools',
menuSort: 1,
menuType: 1,
children: [{
menuId: 2001,
menuCode: '2001',
menuName: '二级菜单-1',
isLeaf: true,
menuUrl: '//localhost:8888/product?test=1',
icon: 'el-icon-s-tools',
sort: 0,
menuType: 2
},
{
menuId: 2002,
menuCode: '2002',
menuName: '二级菜单-2',
isLeaf: false,
menuIcon: 'el-icon-s-tools',
menuUrl: '/test/demo?test=6',
menuType: 1,
sort: 1,
children: [{
menuId: 20021,
menuCode: '20021',
menuName: '二级菜单-2-1',
isLeaf: true,
menuUrl: '//localhost:8888/product?test=2',
menuIcon: 'el-icon-s-tools',
menuType: 2
},
{
menuId: 20022,
menuCode: '20022',
menuName: '二级菜单-2-2',
isLeaf: true,
menuUrl: '/test/demo?test=1',
menuIcon: 'el-icon-s-tools',
menuType: 1
}
]
},
{
menuId: 2003,
menuCode: '2003',
menuName: '二级菜单-3',
isLeaf: false,
menuIcon: 'el-icon-s-tools',
menuUrl: '/test/demo?test=6',
menuType: 1,
sort: 1,
children: [{
menuId: 20031,
menuCode: '20031',
menuName: '二级菜单-3-1',
isLeaf: true,
menuUrl: '//localhost:8888/product?test=5',
menuIcon: 'el-icon-s-tools',
menuType: 2
},
{
menuId: 20032,
menuCode: '20032',
menuName: '二级菜单-3-2',
isLeaf: true,
menuUrl: '/test/demo?test=23',
menuIcon: 'el-icon-s-tools',
menuType: 1
}
]
}
]
}
]
function transformMenuTree(menu, recursionData, resultData) {
for(let i = 0; i < menu.length; i++) {
const menuItem = menu[i];
if(menuItem.menuUrl) {
if(!menuItem.isHide && resultData.defaultPath === '') {
resultData.defaultPath = menuItem.menuUrl
}
resultData.codePaths.set(menuItem.menuCode, [...recursionData.codePaths, menuItem.menuCode]);
resultData.namePaths.set(menuItem.menuCode, [...recursionData.namePaths, { menuName: menuItem.menuName, menuUrl: menuItem.menuUrl }]);
resultData.pathToCode.set(menuItem.menuUrl, menuItem.menuCode)
}
if(menuItem.children) {
const innerPaths = {
codePaths: [...recursionData.codePaths, menuItem.menuCode],
namePaths: [...recursionData.namePaths, { menuName: menuItem.menuName, menuUrl: menuItem.menuUrl }]
}
transformMenuTree(menuItem.children, innerPaths, resultData);
}
}
return map;
}
const paths = {
namePaths: [],
codePaths: [],
}
const map = {
namePaths: new Map(),
codePaths: new Map(),
pathToCode: new Map(),
defaultPath: ''
}
const res = transformMenuTree(menu, paths, map)
console.log(res)