//使用队列的方法,先进先出,每次都遍历第一个数值;
//参数名称:fileRoad:文件路径,fileType:要筛选的文件类型,belongFile:所在文件夹名称(选填)。
//then(data):data为筛选出来的文件列表信息
async function getFileList(fileRoad, fileType, belongFile) {
var newFileList = [];
var youNeed = new RegExp("(" + fileType + ")"); //需要.md文件
// 使用队列的方式,先进先出,[文件路径,类型]
fileList.push([fileRoad, belongFile]);
//当文件列表,文件数长度大于0时
while (fileList.length > 0) {
var [upFileName, upFileType] = [fileList[0][0], fileList[0][1]];
//不断遍历第一个文件,判断是否为文件夹;
if (fs.lstatSync(upFileName).isDirectory()) {
// 判断是否为文件
//获得该文件夹路径,遍历该文件夹下的所有文件
await fileOperation.getFileChildrenName(upFileName).then(data => {
data.forEach(element => {
//element是文件名
//先获取最外层的.md文件
if (youNeed.test(element)) {
var stats = fs.statSync(`${upFileName}/${element}`); // 获得文件最新修改时间
var title = element.split(".");
var articl = title[0];//文件名
var fileroad = path.join(upFileName, element); // 文件夹路径
//获得.md文件的文件名,文件路径,创建时间,类别,
var info = [articl, fileroad, stats.mtime, upFileType];
newFileList.push(info);
} else {
//不是.md文件就存在文件列表数组里
var fileroad = path.join(upFileName, element); // 文件夹路径,存入文件夹路径,文件名
fileList.push([fileroad, element]);
}
});
});
} else {
//先获取最外层的.md文件
if (youNeed.test(fileList[0])) {
var stats = fs.statSync(`${upFileName}/${fileList[0][0]}`); // 获得文件最新修改时间
var title = element.split(".");
var articl = title[0];
//获得.md文件的文件名,文件路径,创建时间,类别,
var info = [articl, fileroad, stats.mtime, upFileType];
newFileList.push(info);
}
}
//对第一个数值操作后,删除第一个数值;
fileList.shift();
}
//当fileList为【】时,得到所需要的文件列表信息;
return newFileList;
}
我的思路来自于:
遍历数组每一项,生成新数组
var arr = [[1, 2, 3],[[[[[[11]]]]]], [4, [5]], [6, [7, 8, 9,[10]]]];
得到 brr: [1, 2, 3, 4, 6,5, 7, 8, 9, 10,11]
运用队列的方式,先进先出的原理。
//把arr的每个数值存放到新的数组brr里;
var arr = [[1, 2, 3],[[[[[[11]]]]]], [4, [5]], [6, [7, 8, 9,[10]]]];
var brr = [];
function channge() {
while (arr.length > 0) {
//不断遍历第一个数值,判断长度是否大于0;
if (arr[0].length > 0) {
//如果第一个数组长度大于0,那么遍历里面的值;
for (var j = 0; j < arr[0].length; j++) {
//如果长度大于0的话,就把该数组插入到arr数组里;
if (arr[0][j].length > 0) {
arr.push(arr[0][j])
} else {
//如果没有那么就加入到brr里;
brr.push(arr[0][j])
}
}
} else {
//如果第一个数值不是数组说明他是数值,那么加入到brr里;
brr.push(arr[0])
}
//对第一个数值操作后,删除第一个数值;
arr.shift();
}
//当arr为【】时,得出brr了
console.log(arr, brr)
}
// 最终打印结果:
// [] [1, 2, 3, 4, 6,5, 7, 8, 9, 10,11]
channge();
如果你想要下载使用
npm i spfiles;
var spfiles = require("spfiles")
//参数名称:fileRoad:文件路径,fileType:要筛选的文件类型,belongFile:所在文件夹名称(选填)。
//then(data):data为筛选出来的文件列表信息
spfiles(fileRoad, fileType, belongFile) .then(data=>{
// data为你所想要的文件类型集合;
});
回答我之前的问题。完毕;
之前使用的是递归的方式去找指定的文件格式,但是不知道什么时候递归会全部结束。
// 获得博客类型的文章,上一级路径,文件名,类型
function getFileList(oldLoad, fileName, type) {
var fileroad = path.join(oldLoad, fileName);// 博客类别路径
var stat = fs.lstatSync(fileroad);// 判断是否为文件
if (stat.isDirectory()) {// 判断是否为文件
// console.log(fileroad, '遍历这个文件夹')
fileOperation.getFileChildrenName(fileroad)
.then((data) => {
data.forEach(element => {
//先获取最外层的.md文件
if (isMd.test(element)) {
var stats = fs.statSync(`${fileroad}/${element}`)// 获得文件最新修改时间
var title = element.split('.');
element = title[0];
var info = [element, stats.mtime, type]
articleList.push(info);
} else {
if (!ignore.test(element)) {
getFileList(fileroad, element, element);
}
}
})
})
}
}