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

如何在嵌套JavaScript对象中获取指定ID的父级ID数组?

如何在嵌套JavaScript对象中获取指定ID的父级ID数组?

源对象

const obj = {
  id: '01',
  children: [
    {
      id: '02',
      children: [
        {
          id: '03',
          children: [],
        },
        {
          id: '04',
          children: [
            {
              id: '05',
              children: [],
            }
          ],
        }
      ],
    },
    {
      id: '06',
      children: [
        {
          id: '07',
          children: [],
        },
        {
          id: '08',
          children: [
            {
              id: '09',
              children: [],
            }
          ],
        }
      ],
    },
  ]
}

需求说明

函数需接收目标id和源对象obj作为参数:

  • 输入id = '08',结果数组应为['01', '06', '08']
  • 输入id = '05',结果数组应为['01', '02', '04', '05']

完整实现代码

const getParentsArr = (obj, targetId) => {
  // 先判断根节点是否就是目标ID
  if (obj.id === targetId) {
    return [obj.id];
  }

  const path = [obj.id];

  function recursiveFind(children) {
    for (const child of children) {
      path.push(child.id);
      // 找到目标ID,返回当前路径的拷贝
      if (child.id === targetId) {
        return [...path];
      }
      // 有子节点则递归查找
      if (child.children.length > 0) {
        const result = recursiveFind(child.children);
        if (result) return result;
      }
      // 没找到,回溯移除当前节点ID
      path.pop();
    }
    // 遍历完未找到目标
    return null;
  }

  return recursiveFind(obj.children) || [];
}

逻辑说明

  1. 初始校验:先检查根节点是否为目标ID,是则直接返回对应数组
  2. 路径追踪:用path数组记录当前遍历到的节点ID链
  3. 递归遍历:
    • 逐个遍历子节点,将ID加入路径
    • 匹配到目标ID时返回路径拷贝(防止后续回溯修改结果)
    • 子节点存在下级时递归查找,若递归返回有效结果则直接向上传递
    • 当前节点及其子节点未找到目标时,从路径中移除当前节点ID(回溯操作)
  4. 兜底处理:若遍历完所有节点都未找到目标,返回空数组

测试示例

console.log(getParentsArr(obj, '08')); // 输出: ['01', '06', '08']
console.log(getParentsArr(obj, '05')); // 输出: ['01', '02', '04', '05']
console.log(getParentsArr(obj, '10')); // 输出: []

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:15:35