从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
相关产品推荐
相关产品推荐

