在js中使用递归函数按扩展名对文件进行排序

Posted

技术标签:

【中文标题】在js中使用递归函数按扩展名对文件进行排序【英文标题】:Sort files by extension with recursive function in js 【发布时间】:2021-11-06 09:03:58 【问题描述】:

我有一个函数可以递归地获取文件夹中的所有文件,但我只想按几个特定的​​扩展名对它们进行排序,我知道我可以使用 glob,但是如何在节点中使用 fs 来做到这一点

const fs = require('fs');
function getFiles (dir, files_)
files_ = files_ || [];
var files = fs.readdirSync(dir);
for (var i in files)
    var name = dir + '/' + files[i];
    if (fs.statSync(name).isDirectory())
        getFiles(name, files_);
     else 
        files_.push(name);
    

return files_;

console.log(getFiles('D:/sample'))

【问题讨论】:

您能否提供可能的输入列表和预期结果列表的示例? 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

您可以在将文件推送到 files_ 数组之前添加条件逻辑,然后使用字符串方法检查 files[i] 的最后 4 个元素是否匹配某个扩展名,如果匹配,则继续将该文件推送到文件_。

  const fs = require('fs');
  function getFiles (dir, files_) 
    files_ = files_ || [];
    var files = fs.readdirSync(dir);
    var parseThese = [".txt", ".pdf", ".csv"];
    
    for (var i in files) 
      var name = dir + '/' + files[i];
      var extension = "";

      if (fs.statSync(name).isDirectory()) 
        return getFiles(name, files_);
       

      extension = files[i].slice(-4);
      if (parseThese.includes(extension)) 
        return files_.push(name);
      
    
    return files_;
 
 console.log(getFiles('D:/sample'))

它没有使用 FS 模块,但也许这可以工作。

【讨论】:

以上是关于在js中使用递归函数按扩展名对文件进行排序的主要内容,如果未能解决你的问题,请参考以下文章

main函数可否进行递归调用

按文件大小对文件进行递归排序

SQL递归查询知多少

快速排序:递归与非递归

使用选择算法编译时间递归排序

如何计算fibonacci函数的递归调用次数