我正在尝试根据文件名和根目录的数组进行文件搜索。我在网上找到了一些文件搜索片段,这些片段似乎在我仅找到1个单个文件时起作用,但是当指定的文件数量超过1个时,它将不起作用。以下是代码段:
const fs = require('fs');
const path = require('path');
var dir = '<SOME ROOT DIRECTORY>';
var file = 'Hello_World.txt'
var fileArr = ['Hello_World.txt', 'Hello_World2.txt', 'Hello_World3.txt'];
const findFile = function (dir, pattern) {
var results = [];
fs.readdirSync(dir).forEach(function (dirInner) {
dirInner = path.resolve(dir, dirInner);
var stat = fs.statSync(dirInner);
if (stat.isDirectory()) {
results = results.concat(findFile(dirInner, pattern));
}
if (stat.isFile() && dirInner.endsWith(pattern)) {
results.push(dirInner);
}
});
return results;
};
console.log(findFile(dir, file));
关于如何使用数组而不是单个文件字符串的任何想法?
执行以下操作似乎可行,但不知道是否还有其他方法可能更简单:
newFileArr = [];
fileArr.forEach((file => {
//findFile(dir, file).toString();
console.log(findFile(dir, file).toString());
}));
唯一需要更改的是确定单个文件路径是否满足搜索条件的条件。在您发布的代码中,它看起来像dirInner.endsWith(pattern)
,上面写着“文件路径是否以给定的模式结尾?”
我们想将其改为“文件路径是否以给定模式的any结尾?”更接近代码的外观,我们可以将其表述为“我们可以找到一个给定的模式,使得文件路径以该模式结尾吗?”
让我们将pattern
重命名为patterns
。然后我们可以简单地将dirInner.endsWith(patterns)
替换为patterns.some(pattern => dirInner.endsWith(pattern))