SOURCE

const arr = [
    {
        id: 1,
        url: "system",
        sort: 2,
        icon: "icon-yun",
        keepAlive: 0,
        parentId: null,
        componentName:'System',
        name: "系统管理"
    },
    {
        id: 2,
        url: "system/account",
        sort: 3,
        icon: "icon-ziduanguanli",
        componentName:'Account',
        keepAlive: 0,
        parentId: 1,
        name: "账号管理"
    },
    {
        id: 4,
        url: "system/access",
        sort: 6,
        icon: "icon-shuazi-1",
        componentName:'Access',
        keepAlive: 1,
        parentId: 1,
        name: "资源管理"
    }
]

function listTree(items, parentId = null){
    return items.filter(item=>item.parentId == parentId).map(item=>{
        if (listTree(items, item.id).length) {
                return {
                    path:`/${item.url}`,
                    name:item.componentName,
                    meta:{
                        orderNo:item.sort,
                        title:item.name,
                        icon:item.icon,
                        ignoreKeepAlive:Boolean(item.keepAlive)
                    },
                    component: 'LAYOUT',
                    redirect:`/${listTree(items, item.id)[0].path}`,
                    children: listTree(items, item.id)
                }
            } else {
                return {
                    path:item.url,
                    name:item.componentName,
                    meta:{
                        title:item.name,
                        icon:item.icon,
                        orderNo:item.sort,
                        ignoreKeepAlive:Boolean(item.keepAlive)
                    },
                    component:`/${item.url}/index`,
                }
            }
    })
}
console.log(listTree(arr))
console 命令行工具 X clear

                    
>
console