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);
                        }
                    }
                })
            })
    }
}

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值