编辑代码

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)