递归实现,测试了一个四级目录没有问题.如果有误还望指出改正
需要node环境
- DIR为指定目录的上一级
- base为指定目录的名称
//获取指定目录下的所有文件名称
const fs = require("fs/promises")
const DIR = "C:\\Users\\13477\\Desktop\\test\\docs"
const base = "第1章 快速开始"
//将指定目录下的文件生成obj
async function getObj(dir){
//获取指定目录下的所有文件
let list = await fs.readdir(dir)
//生成对应的obj
let array1 = []//存放原始的配置对象
for (let name of list) {
array1.push({title:name,children:[]})
}
return array1
}
//
async function isDir(path){
let result = await fs.stat(path)
return result.isDirectory()
}
async function my(path,arrays){
// console.log('外',path)
//获取指定目录下的所有文件(对象形式)
let array1 = await getObj(path)
// console.log(array1)
arrays.push(...array1)
if (arrays.length>0){
for (const array1Element of arrays) {
const index = arrays.indexOf(array1Element);
let path1 = path+"\\"+array1Element.title
// console.log('内',path1)
//判断是否是目录
if (await isDir(path1)){
//如果是目录
await my(path1,arrays[index].children)
}else{
//不是目录,通过路径解析出所需 路由
array1Element.children.push(path1.slice(path1.indexOf(base)-1).replaceAll("\\",'/'))
}
}
}
}
(async ()=>{
let path = DIR+"\\"+base
let arrays = []
await my(path,arrays)
console.log(JSON.stringify(arrays)
.replaceAll("\n",'')
.replaceAll(".md",'')
)
})()