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

如何生成嵌套对象格式的目录层级,直到读取到.dcm格式文件

问题原因分析
  • 异步调用未等待执行完成:make_dir是异步函数,返回值为Promise对象,你没有使用await等待执行完成就直接赋值给sub_dir字段,因此该字段会显示为pending状态的Promise。
  • 提前终止当前层级处理:你在forEach遍历到第一个非.dcm后缀的文件时就直接调用resolve返回结果,直接中断了当前层级其余文件的遍历逻辑,无法处理多子目录、同时存在子目录和dcm文件的场景。
  • 层级判断逻辑缺失:没有先判断当前层级的文件类型构成,无法区分「存在子目录要继续嵌套」和「全为dcm文件要返回文件名数组」两种场景。
修复后代码
const fs = require('fs/promises');
const path = require('path');

async function makeDir(currentPath) {
  // 读取当前目录下所有文件,同时获取文件类型避免误判带后缀的目录
  const files = await fs.readdir(currentPath, { withFileTypes: true });
  // 分别筛选子目录和dcm格式文件
  const subDirs = files.filter(file => file.isDirectory());
  const dcmFiles = files.filter(file => file.isFile() && file.name.endsWith('.dcm')).map(file => file.name);

  // 符合预期规则:当前层级无子目录、仅存在dcm文件时直接返回文件名数组
  if (subDirs.length === 0) {
    return dcmFiles;
  }

  // 适配你示例的单层级嵌套结构,多子目录场景可调整为返回子目录对象数组
  const targetDir = subDirs[0];
  return {
    dir_name: targetDir.name,
    sub_dir: await makeDir(path.join(currentPath, targetDir.name))
  }
}

// 调用示例,外层需要用await或者then获取最终结果
async function main() {
  const result = {
    dir_name: 'test',
    sub_dir: await makeDir('./test')
  }
  console.log(JSON.stringify(result, null, 2));
}

main();

如果业务场景中同一层级允许存在多个子目录,可以调整sub_dir字段为子目录对象数组,适配实际需求即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:57:03