Nodejs Поиск файлов из массива имен файлов - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь выполнить поиск файлов на основе массива имен файлов и каталога root. Я обнаружил некоторые фрагменты поиска файлов в Интернете, которые, кажется, работают, когда я нахожу только 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());
}));

1 Ответ

1 голос
/ 30 марта 2020

Единственное, что нужно изменить - это условие, чтобы определить, соответствует ли отдельный путь к файлу критериям поиска. В опубликованном вами коде это выглядит как dirInner.endsWith(pattern), который говорит: «заканчивается ли путь к файлу указанным шаблоном?»

Мы хотим изменить это, чтобы сказать «заканчивается ли путь к файлу любой из данных шаблонов? " И ближе к тому, как будет выглядеть код, мы можем перефразировать его как «Можем ли мы найти данный шаблон таким образом, чтобы путь к файлу заканчивался этим шаблоном?»

Давайте переименуем pattern в patterns. Тогда мы можем просто заменить dirInner.endsWith(patterns) на patterns.some(pattern => dirInner.endsWith(pattern))

...