从文件名数组搜索Nodejs文件

问题描述 投票:0回答:1

我正在尝试根据文件名和根目录的数组进行文件搜索。我在网上找到了一些文件搜索片段,这些片段似乎在我仅找到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());
}));
javascript arrays node.js search filenames
1个回答
0
投票

唯一需要更改的是确定单个文件路径是否满足搜索条件的条件。在您发布的代码中,它看起来像dirInner.endsWith(pattern),上面写着“文件路径是否以给定的模式结尾?”

我们想将其改为“文件路径是否以给定模式的any结尾?”更接近代码的外观,我们可以将其表述为“我们可以找到一个给定的模式,使得文件路径以该模式结尾吗?”

让我们将pattern重命名为patterns。然后我们可以简单地将dirInner.endsWith(patterns)替换为patterns.some(pattern => dirInner.endsWith(pattern))

© www.soinside.com 2019 - 2024. All rights reserved.