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

JavaScript实现:将字符串化目录树转换为目录列表

如何将目录树结构字符串转换为目录路径数组(JavaScript实现)

问题说明

需要实现一个JavaScript函数,把特定格式的目录树字符串转换成完整的目录路径数组。格式规则如下:

  • 文件夹名后紧跟[],方括号内是该文件夹的子项(空[]表示空文件夹)
  • 同一层级的子项用&分隔
  • 示例输入:
const input = "bucket[f1[a&b&f[]&ff1[a&b]]&f2[a&b&ff1[a&b]]&f3[ff1[a]]]";
  • 预期输出(完整路径数组):
[
  "bucket/f1/a",
  "bucket/f1/b",
  "bucket/f1/f",
  "bucket/f1/ff1/a",
  "bucket/f1/ff1/b",
  "bucket/f2/a",
  "bucket/f2/b",
  "bucket/f2/ff1/a",
  "bucket/f2/ff1/b",
  "bucket/f3/ff1/a"
]

之前尝试递归+正则的方案,但无法区分不同层级的&符号,导致解析错误。

解决方案:基于栈的层级解析

嵌套结构最适合用栈来跟踪当前路径层级,逐个字符解析字符串,避免正则无法处理嵌套的问题。核心思路:

  1. 用栈保存当前的路径层级,初始时压入根文件夹名
  2. 遍历字符串,提取文件夹/文件名,遇到[时将当前文件夹压入栈,遇到]时弹出栈顶
  3. 遇到&时,将当前路径(栈拼接的结果)加入结果数组(如果是文件或者空文件夹)
  4. 处理末尾的最后一个项,避免遗漏

实现代码

function parseDirTree(input) {
  const result = [];
  const stack = [];
  let currentName = "";

  for (let i = 0; i < input.length; i++) {
    const char = input[i];

    if (char === "[" || char === "&" || char === "]") {
      // 处理当前收集的名称(文件夹或文件)
      if (currentName) {
        // 如果是遇到[,说明当前是文件夹,先处理空文件夹情况,再压栈
        if (char === "[") {
          const currentPath = stack.length ? `${stack.join("/")}/${currentName}` : currentName;
          // 检查是否是空文件夹(下一个字符是])
          if (input[i + 1] === "]") {
            result.push(currentPath);
          }
          stack.push(currentName);
        } else if (char === "&") {
          // 遇到&,拼接当前完整路径加入结果
          const currentPath = stack.join("/") + "/" + currentName;
          result.push(currentPath);
        }
        currentName = "";
      }

      // 遇到]时弹出栈顶,回到上一层目录
      if (char === "]") {
        stack.pop();
      }
    } else {
      // 收集文件夹/文件名的字符
      currentName += char;
    }
  }

  return result;
}

// 测试示例
const input = "bucket[f1[a&b&f[]&ff1[a&b]]&f2[a&b&ff1[a&b]]&f3[ff1[a]]]";
console.log(parseDirTree(input));

代码说明

  • 遍历过程中逐个收集名称字符,直到遇到[/&/]触发处理逻辑
  • 遇到[时,先判断是否是空文件夹(下一个字符为]),如果是则直接将路径加入结果;再将当前文件夹压入栈,跟踪层级
  • 遇到&时,将栈中路径与当前名称拼接成完整路径,加入结果数组
  • 遇到]时弹出栈顶,回到父目录层级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:24:31