//使用隊列的方法,先進先出,每次都遍歷第一個數值;
//參數名稱: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);
}
}
})
})
}
}