使用 js 的数组方法从二维数组中搜索一个符合条件的值

请尝试在评论区里写下答案(如不能清楚表述,那么你可能没真正理解)。欢迎参与,为下一次求职做准备。

是处理菜单和路由时的实际案例。

当从一个具体的路由(例如:localhost:8899/#/blog/new)进入页面时,需要按照当前路由来初始化菜单的选中状态。如下是菜单数组:

[
    {
        path: '/dashboard',
        title: '控制台',
        icon: 'dashboard'
    },
    {
        title: '博客管理',
        icon: 'dashboard',
        children: [
            {
                path: '/blog/new',
                title: '新博文',
                icon: 'dashboard'
            },
            {
                path: '/blog/blogs',
                title: '文章列表',
                icon: 'dashboard'
            },
            {
                path: '/blog/categorys',
                title: '分类列表',
                icon: 'dashboard'
            },
        ]
    },
    {
        title: '系统设置',
        icon: 'dashboard',
        children: [
            {
                path: '/setting/baseinfo',
                title: '基本信息设置',
                icon: 'dashboard'
            },
            {
                path: '/blog/seo',
                title: 'seo 配置',
                icon: 'dashboard'
            },
            {
                path: '/blog/themes',
                title: '主题市场',
                icon: 'dashboard'
            },
            {
                path: '/blog/export',
                title: '导出博文',
                icon: 'dashboard'
            }
        ]
    }
]

如何用 js 的数组方法(不能用 foreach、for…in、for),从数组中找出符合 path == '/blog/new'的一项,并且得到对应项的 index,如果符合条件的项目在 children 里,还要返回两层分别的 index。

结果类似:
如果路由是 /dashboard,则结果是 0
如果路由是 /blog/new',则结果是 1_0

从前从前,有个人爱你很久
thebestxt
讨论数量: 1
thebestxt
const defaultSelectedKeys = menu.reduce((total, v, k) => {
    if (v.children) {
        total.push(...v.children.map((vv, kk) => {
            vv.k = `${k}_${kk}`
            return vv
        }))
    } else {
        v.k = `${k}`
        total.push(v)
    }
    return total
}, []).find(v => v.path == hash).k
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!