SOURCE

let arr = [
  {
    path: "/",
    name: "/",
    redirect: "/home",
    component: () => import("@/layout/index.vue"), // 容器布局-顶层路由
    meat: {
      isKeepAlive: true
    },
    // 二级路由-主要渲染页面
    children: [
      {
        path: "/home",
        name: "home",
        component: () => import("@/views/home/home.vue"),
        meat: {
          title: "home", // 国际化
          isHide: false, // 是否隐藏此路由
          isKeepAlive: true, // 缓存组件状态
          isAffix: true, // 固定在tagesView栏上
          isLink: "", // 是否外链
          isIframe: false, // 是否内嵌窗口
          roles: ["admin"], // 路由权限
          icon: "home" // 菜单图标
        }
      },
            {
        path: "/home2",
        name: "home2",
        component: () => import("@/views/home/home.vue"),
        meat: {
          title: "home2", // 国际化
          isHide: false, // 是否隐藏此路由
          isKeepAlive: true, // 缓存组件状态
          isAffix: true, // 固定在tagesView栏上
          isLink: "", // 是否外链
          isIframe: false, // 是否内嵌窗口
          roles: ["common"], // 路由权限
          icon: "home" // 菜单图标
        }
      },
      {
        path: "/common-components",
        name: "common-components",
        redirect: "/common-components/form-component",
        component: () => import("@/views/common-components/form-component/form-component.vue"),
        meta: {
          title: "common-components",
          isLink: "",
          isHide: false,
          isKeepAlive: true,
          isAffix: true,
          isIframe: false,
          roles: ["admin"],
          icon: "set"
        },
        children: [
          {
            path: "/common-components/form-component",
            name: "form-component",
            component: () => import("@/views/common-components/form-component/form-component.vue"),
            meta: {
              title: "form-component",
              isLink: "",
              isHide: false,
              isKeepAlive: true,
              isAffix: false,
              isIframe: false,
              roles: ["admin"],
              icon: "common"
            }
          }
        ]
      },
      {
        path: "/multilevel-menu",
        name: "multilevel-menu",
        redirect: "/multilevel-menu/second-menu",
        component: () => import("@/views/multilevel-menu/second-menu/second-menu.vue"),
        meta: {
          title: "multilevel-menu",
          isLink: "",
          isHide: false,
          isKeepAlive: true,
          isAffix: true,
          isIframe: false,
          roles: ["admin"],
          icon: "switch"
        },
        children: [
          {
            path: "/multilevel-menu/second-menu",
            name: "second-menu",
            component: () => import("@/views/multilevel-menu/second-menu/second-menu.vue"),
            meta: {
              title: "second-menu",
              isLink: "",
              isHide: false,
              isKeepAlive: true,
              isAffix: false,
              isIframe: false,
              roles: ["admin"],
              icon: "common"
            },
            children: [
              {
                path: "/multilevel-menu/third-menu",
                name: "third-menu",
                component: () => import("@/views/multilevel-menu/third-menu/third-menu.vue"),
                meta: {
                  title: "third-menu",
                  isLink: "",
                  isHide: false,
                  isKeepAlive: true,
                  isAffix: false,
                  isIframe: false,
                  roles: ["admin"],
                  icon: "common"
                }
              }
            ]
          }
        ]
      }
    ]
  }
];

// console.log(arr)
// let rule = ["admin"]
//  console.time('test');
// let all = [];
// const flatRoute = (arr) => {
//       arr.forEach(item => {
//         all.push(item)
//         if(item.children){
//             return flatRoute(item.children)
//         }
//     })
// }
// flatRoute(arr)
// console.log(all)
// console.timeEnd('test')
 console.time('test');
function flattenChildrenReduce(arr) {
    return arr.reduce((result, item) => {
        result.push(item);
        if (item.children) {
            result = result.concat(flattenChildrenReduce(item.children)); 
        }
        return result;
    }, []);
}
console.log(flattenChildrenReduce(arr));
console.timeEnd('test')
console 命令行工具 X clear

                    
>
console