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

如何在JavaScript中从文件路径数组构建树形对象?

将文件路径数组转换为可扩展的文件夹树形结构(JavaScript)

核心实现思路

因为输入的路径数组是有序的(父文件夹一定出现在子文件夹之前),我们可以直接逐层遍历路径片段,从根节点开始构建树形结构,每个节点预留files数组用于后续添加文件,folders对象存储子文件夹。

完整代码实现

1. 构建树形结构

// 示例输入路径数组
const paths = ['root/folder1', 'root/folder1/folderA', 'root/folder1/folderA/folderi', 'root/folder1/folderB', 'root/folder2'];

// 初始化根结构,符合你要求的预留格式
const allFolders = {
  root: {
    files: [],
    folders: {}
  }
};

// 遍历每个路径,逐层构建节点
paths.forEach(path => {
  const segments = path.split('/');
  let currentNode = allFolders.root;

  // 从第二个片段开始处理(第一个是root,已作为初始节点)
  for (let i = 1; i < segments.length; i++) {
    const folderName = segments[i];
    // 子文件夹不存在则创建,自动带上files和folders结构
    if (!currentNode.folders[folderName]) {
      currentNode.folders[folderName] = {
        files: [],
        folders: {}
      };
    }
    // 移动到下一层节点
    currentNode = currentNode.folders[folderName];
  }
});

console.log(allFolders);

2. 遍历树形结构生成层级展示

要输出你需要的层级文件夹树,用递归遍历即可:

// 递归打印文件夹层级
function printFolderHierarchy(node, folderName, indent = '') {
  // 打印当前文件夹
  console.log(`${indent}${folderName}`);
  
  // 遍历所有子文件夹
  Object.entries(node.folders).forEach(([name, childNode]) => {
    // 根据层级生成对应缩进和标记
    const level = Math.floor(indent.length / 3) + 1;
    const newIndent = indent + '  ' + '-'.repeat(level) + ' ';
    printFolderHierarchy(childNode, name, newIndent);
  });
}

// 从root节点开始打印
printFolderHierarchy(allFolders.root, 'root');

运行后会输出:

root
  - folder1
    -- folderA
       --- folderi
    -- folderB
  - folder2

后续扩展:添加文件

因为每个节点都预留了files数组,直接找到对应节点添加即可:

// 给root/folder1/folderA添加文件
allFolders.root.folders.folder1.folders.folderA.files.push('document.pdf', 'image.png');

// 查看添加后的节点
console.log(allFolders.root.folders.folder1.folders.folderA.files);
// 输出: ['document.pdf', 'image.png']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:50:08