You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS如何在嵌套对象中根据访问路径匹配获取对应子页面名称

现有逻辑存在的问题
  • 遍历范围仅覆盖最外层一级页面键(即Page1/Page2/Page3这类一级节点),find方法命中符合条件的一级节点后就直接返回该一级键,因此匹配到Page3下的子路径符合规则时,直接返回了外层的Page3,根本没有读取子层对应的页面名称。
  • 逻辑硬绑定了提前解析的currentPageName做匹配,没有做递归遍历处理,只要嵌套层级超过2层(比如子页面下再嵌套三级页面节点),现有逻辑会直接失效,同时也没有兼容一级页面本身path直接匹配的场景。
  • 代码本身存在语法错误:getThePageName = = path处多写了一个等号,末尾console.log语句多了一个闭合括号,运行时会直接报语法错误。
修正方案

不要依赖提前解析路由参数得到的currentPageName,改用递归逻辑遍历全量节点,不管嵌套多少层级,只要节点的path和传入的目标路径一致,就返回对应的节点键名即可,修正后的代码如下:

const jsonData = {
  "Page1": { "path": "/page1" },
  "Page2": { "path": "/account/menu/page1" },
  "Page3": {
    "items": {
      "Subpage1": { "path": "/account/menu/subpage1" },
      "Subpage2": { "path": "/account/menu/subpage2" },
      "Subpage3": { "path": "/account/menu/subpage3" }
    }
  },
  "Page4": {
    "items": {
      "Subpage4": { "path": "/account/menu/subpage4" },
      "Subpage5": { "path": "/account/menu/subpage5" }
    }
  }
}

// 递归遍历页面对象,匹配目标路径对应的页面名
const getThePageName = (targetPath, pageTree = jsonData) => {
  for (const pageName of Object.keys(pageTree)) {
    const config = pageTree[pageName];
    // 当前节点path匹配则直接返回名称
    if (config.path === targetPath) return pageName;
    // 存在子节点则递归查找子层,命中结果直接返回
    if (config.items) {
      const subMatch = getThePageName(targetPath, config.items);
      if (subMatch) return subMatch;
    }
  }
  // 无匹配项返回null
  return null;
}

// 测试调用
console.log("getThePageName", getThePageName("/account/menu/subpage2")); // 输出 Subpage2

该实现支持任意层级的嵌套页面结构,后续新增多级子页面时不需要修改遍历逻辑,同时也避免了路由参数解析错误导致的匹配异常问题。

内容的提问来源于stack exchange,提问作者Pikk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:06:19