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

递归函数实现:检查多层对象中是否存在指定Link ID

修正后的函数实现

你的函数核心逻辑方向正确,但存在两个关键问题导致无法返回正确结果:

  1. 遍历子节点时使用map,但未捕获递归调用的返回值,即便子节点匹配成功,上层函数也无法感知
  2. 缺少边界处理,若节点无link或children属性,会触发运行时错误

以下是修正后的完整代码:

const isObject = (value: unknown): value is Record<string, any> => {
  return !!(value && typeof value === 'object' && !Array.isArray(value))
}

const containsActiveLink = (linkObject: any = {}, pageIDToMatch: string): boolean => {
  // 边界校验:非对象或无link属性直接返回false
  if (!isObject(linkObject) || !linkObject.link) {
    return false
  }

  // 检查当前节点的link.id是否匹配
  if (linkObject.link.id === pageIDToMatch) {
    return true
  }

  // 遍历子节点,只要有一个匹配就返回true
  if (Array.isArray(linkObject.children)) {
    return linkObject.children.some(child => containsActiveLink(child, pageIDToMatch))
  }

  return false
}

// 测试示例
const sampleObj = {
  id: '55259494',
  menuText: 'Top level link',
  link: {
    id: '55259472',
    slug: 'lop-level-link',
  },
  children: [
    {
      id: '53664310',
      menuText: 'Product paths',
      link: {
        id: '51125095',
        slug: 'product-paths',
      },
      children: [],
    },
    {
      id: '53664355',
      menuText: 'Testing',
      link: {
        id: '51272081',
        slug: 'testing',
      },
      children: [],
    },
    {
      id: '53664382',
      menuText: 'Relay',
      link: {
        id: '51489535',
        slug: 'relay',
      },
      children: [],
    },
    {
      id: '55259577',
      menuText: 'About us',
      link: {
        id: '55259487',
        slug: 'about-us',
      },
      children: [],
    },
  ],
}

const isActiveLink = containsActiveLink(sampleObj, '51125095')
console.log(isActiveLink) // 输出: true

关键修改说明

  • 替换map为some:some方法会在数组中找到第一个匹配元素时立即返回true并终止遍历,完美适配"只要存在匹配就返回"的需求
  • 补充边界校验:提前过滤非对象节点、无link的节点,避免访问undefined.id引发报错
  • 优化类型定义:给isObject添加类型断言,提升TypeScript类型推断准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:46:17