为了账号安全,请及时绑定邮箱和手机立即绑定

返回json对象中最匹配的值

返回json对象中最匹配的值

慕婉清6462132 2019-03-12 11:19:46
var jsonObj = [    {        id: 1,        name: '首页',        path: '/dashboard',        children: []    },    {        id: 2,        name: '权限',        path: '/auth',        children: [            {                id: 3,                name: '角色',                path: '/auth/role',                children: [                ]            }        ]    }]var pathStr = '/auth/role/list'有上面两个变量jsonObj和pathStr,如果在jsonObj中有path属性对应的值和pathStr相同的,那么就返回pathStr,如果没有相同的,就找和pathStr最接近的,比如在此例中最终返回的是'/auth/role'
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

function trans (arr, path, cur) {

    cur = cur || ''

    for (let i = 0, len = arr.length; i < len; i++) {

        let name = arr[i].path

        if (path.startsWith(name)) {

            let children = arr[i].children

            let result = children && children.length ? trans(children, path, name) : name

            if (result === path) return path

            if (result.length > cur.length) cur = result

        }

    }

    return cur

}

trans(jsonObj, pathStr)


查看完整回答
反对 回复 2019-04-06
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

DFS 思路供参考


function matchPath (pathSrc, jsonObj) {

  let bestMatch = ''

  _match(jsonObj)

  return bestMatch


  function _match (list) {

    if (!Array.isArray(list)) { return }

    for (let i = 0; i < list.length; i++) {

      const { path = '', children } = list[i]

      if (path === pathSrc) {

        bestMatch = pathSrc

        return

      }

      if (pathSrc.startsWith(path) && path.length > bestMatch.length) {

        bestMatch = path

      }

      if (children) {

        _match(children)

      }

    }

  }

}


查看完整回答
反对 回复 2019-04-06
  • 3 回答
  • 0 关注
  • 469 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信