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

从JSON文件夹结构获取指定文件夹父级层级路径的问题

修复文件夹父路径查找函数

问题分析

你的findparent函数返回空数组,大概率是递归过程中未正确维护父路径追踪,或是找到目标节点后未正确返回累积的父路径,也可能是递归终止条件设置错误。

解决方案

1. 标准文件夹结构JSON(匹配你的示例)

先确保你的JSON结构包含name(文件夹名称)和children(子文件夹列表)字段:

const folderTree = {
  name: "FolderHome",
  children: [
    {
      name: "lvl1",
      children: [
        { name: "lvl11", children: [] },
        { name: "lvl12", children: [] },
        { name: "lvl13", children: [] }
      ]
    },
    {
      name: "lvl2",
      children: [
        { name: "lvl21", children: [] },
        { name: "lvl22", children: [] },
        { name: "lvl23", children: [] }
      ]
    }
  ]
};

2. 修复后的findparent函数

通过递归遍历并维护当前父路径数组,找到目标文件夹时返回拼接好的路径:

function findparent(targetName) {
  // 递归辅助函数:遍历节点+追踪父路径
  function traverse(node, parentPath) {
    for (const child of node.children) {
      if (child.name === targetName) {
        // 找到目标,返回拼接后的父路径
        return parentPath.join('\\');
      }
      // 递归遍历子节点,父路径追加当前子节点的上级名称
      const result = traverse(child, [...parentPath, child.name]);
      // 子节点找到结果则直接返回,无需继续遍历
      if (result) return result;
    }
    // 未找到目标,返回null
    return null;
  }

  // 从根节点启动遍历,初始父路径包含根节点名称
  return traverse(folderTree, [folderTree.name]) || [];
}

3. 测试验证

console.log(findparent('lvl23')); // 输出: FolderHome\lvl2
console.log(findparent('lvl12')); // 输出: FolderHome\lvl1
console.log(findparent('nonexist')); // 输出: []

关键修复点

  • 递归时传递父路径的副本,避免原数组被修改导致路径混乱
  • 找到目标节点后直接返回拼接结果,而非空数组
  • 子节点递归找到结果后立即向上返回,减少无效遍历
  • 初始父路径包含根节点名称,匹配需求中的层级逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:02:09