js 字典数组递归搜索

发布于 2022-09-11 23:13:57 字数 1246 浏览 11 评论 0

现有数组字典数组如下:

const globalRoutes = [
    {
        path: '/user',
        meta: {
            title: 'UserManager',
            icon: 'el-icon-user'
        },
        children: [{
            path: 'userinfo',
            meta: {
                title: 'UserInfo',
            }
        },
        {
            path: 'roleinfo',
            meta: {
                title: 'Roleinfo'
            }
        },
        {
            path: 'rolemenu',
            meta: {
                title: 'roleMenu'
            }
        }
        ]
    },
    {
        path: '/test',
        meta: {
            title: 'TestMenu',
            icon: 'el-icon-setting'
        }
    }
]

后台返回的用户菜单列表如下:

const menuRoutes = ['userinfo', '/test', '/user','roeleinfo]

期望返回数据:

[

    {
        path: '/user',
        meta: { title: 'UserManager', icon: 'el-icon-user' },
        children: [
            { path: 'userinfo', meta: { title: 'UserInfo' } },
            { path: 'roleinfo', meta: { title: 'Roleinfo' } },
        ]
    },
    {
        path: '/test',
        meta: { title: 'TestMenu', icon: 'el-icon-setting' }
    }
]

望大神帮忙提供下解决方法,自己写的代码递归的时候总会有多余的值。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

原谅我要高飞 2022-09-18 23:13:57

贴下自己写的方法,不过现在方法出来的值不是想要的。

const globalRoutes = [
    {
        path: '/user',
        meta: {
            title: 'UserManager',
            icon: 'el-icon-user'
        },
        children: [{
            path: 'userinfo',
            meta: {
                title: 'UserInfo',
            }
        },
        {
            path: 'roleinfo',
            meta: {
                title: 'Roleinfo'
            }
        },
        {
            path: 'rolemenu',
            meta: {
                title: 'roleMenu'
            }
        }
        ]
    },
    {
        path: '/test',
        meta: {
            title: 'TestMenu',
            icon: 'el-icon-setting'
        }
    }
]


const menuRoutes = ['userinfo', '/test', '/user','roeleinfo]

function Test1(routes) {
    res = []
    for(let route of routes){
        console.log(route.path)
        const data = {}
        let menuIndex = menuRoutes.indexOf(route.path)
        if(menuIndex > -1){
            data.path = route.path
            data.meta = route.meta
        }else{
            if(route.children){
                data.path = route.path
                data.meta = route.meta
                data.children = Test1(route.children)
            }
        }
        if (Object.keys(data).length > 0){
            res.push(data)
        }

    }
    return res
}

console.log(Test1(globalRoutes))
心头的小情儿 2022-09-18 23:13:57

很简单的啊,看代码。

function generateRouters(routers = [], paths=[]) {
  const relativePaths = [], absolutePaths = []
  paths.forEach(v => {
    if (v.startsWith('/')) {
      absolutePaths.push(v)
    } else {
      relativePaths.push(v)
    }
  })
  return routers.filter(v => {
    if (Array.isArray(v.children)) {
      v.children = v.children.filter(child => {
        return relativePaths.includes(child.path)
      })
    }
    return absolutePaths.includes(v.path)
  })
}

const globalRoutes = [
  {
      path: '/user',
      meta: {
          title: 'UserManager',
          icon: 'el-icon-user'
      },
      children: [{
          path: 'userinfo',
          meta: {
              title: 'UserInfo',
          }
      },
      {
          path: 'roleinfo',
          meta: {
              title: 'Roleinfo'
          }
      },
      {
          path: 'rolemenu',
          meta: {
              title: 'roleMenu'
          }
      }
      ]
  },
  {
      path: '/test',
      meta: {
          title: 'TestMenu',
          icon: 'el-icon-setting'
      }
  }
]

const menuRoutes = ['userinfo', '/test', '/user','roleinfo']

generateRouters(globalRoutes, menuRoutes)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文