js:遍歷某個文件下所有文件的指定的文件類型

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

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章