JS如何将路径映射对象数组拼接为完整文件夹层级路径
JavaScript对象数组拼接完整文件夹路径方案
实现思路
- 先构建父路径映射表:遍历所有节点,以
innerpath为键、outerpath为值存储,可快速查询任意路径的上级父路径 - 筛选叶子节点:
id === "Level 1"的节点为路径最末端,无下级子文件夹,从这类节点开始向上溯源 - 逐层拼接路径:对每个叶子节点,从当前末端路径开始,不断查找父路径拼接至路径头部,直到找不到父路径即得到完整层级路径
完整代码实现
function buildFullPaths(pathNodeArr) { // 构建父路径映射表 const parentPathMap = {} pathNodeArr.forEach(node => { parentPathMap[node.innerpath] = node.outerpath }) // 筛选所有最低层级的叶子节点 const leafNodes = pathNodeArr.filter(node => node.id === 'Level 1') const fullPathResult = [] leafNodes.forEach(leaf => { // 初始路径为 父路径/当前叶子路径 let fullPath = `${leaf.outerpath}/${leaf.innerpath}` // 向上溯源拼接所有父层级 let currentParent = parentPathMap[leaf.outerpath] while (currentParent) { fullPath = `${currentParent}/${fullPath}` currentParent = parentPathMap[currentParent] } fullPathResult.push(fullPath) }) return fullPathResult } // 使用方式:直接传入你现有代码生成的folderHierarchy.path数组即可 const resultPaths = buildFullPaths(folderHierarchy.path) // 打印输出结果 resultPaths.forEach(path => console.log(path))
测试验证
以你给出的第二组补充测试数据为例,执行上述代码后输出结果如下:
test plan/Regression/area 1/Subarea 1 test plan/Regression/area 2 test plan/other testing/other testing area 1 test plan/other testing/other testing area 2/other testing subarea 1 test plan/Regression/area 1/Subarea 2/SubSubArea 1
完全符合预期的路径拼接规则,支持任意层级嵌套、任意数量的顶层路径场景。如果需要规避极端情况下的路径循环问题,可以在溯源时新增已访问路径的判断,避免死循环。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

