2016-06-16 8 views
0

Я работаю в учебном руководстве по узлам: learnyounode, который находится в here. Я работал над вызовом пять (FILTERED LS).Как найти список файлов с определенным расширением из массива

Проблема заключалась в следующем:

Создать программу, которая выводит список файлов в заданной директории, отфильтрованный расширением файлов. Вам будет предоставлено имя каталога в качестве первого аргумента вашей программы (например, '/ path/to/dir /') и расширение файла для фильтрации по второму аргументу.

Это мой код до сих пор:

var fs = require('fs'); 
    var path = require('path'); 

    extname = '.' + path.extname(process.argv[3]); 

    console.log(extname); 

    fs.readdir(process.argv[2].toString(), function(err, list) { 

     if (err) { 
      throw err; 
     } 

     list.filter(extname); 
     console.log(list); 
    }); 

Как эффективно отфильтровать все файлы, которые даны в качестве консольного аргумента? Имеет ли он какое-то отношение к path.extname? Если да, то как? Я пробовал использовать .filter(), но это не работает. Кто-то также сможет объяснить мне, как работает .filter(), а также его аргументы, поскольку я нашел документацию немного запутанной. Наконец, есть ли лучший способ вывода элементов массива на отдельные строки, чем console.log()?

Благодаря

+0

Попробуйте [MDN] (https: // developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) –

ответ

0

Выглядит как использование .filter() - вместо того, чтобы обеспечить имя расширения в качестве аргумента функции, то необходимо предоставить обратный вызов, который будет вызываться на каждом элементе списка, и возвращать только те значения, которые проходят конкретный тест (в этом случае расширение файла присутствует в строке).

Например

var filelist = ['woohoo.txt', 'aha.pdf', 'wahoo.txt']; 
var extension = '.txt'; 

var x = filelist.filter(function(file){ 
    return file.indexOf(extension) !== -1; 
}); 

console.log(x); // expected output: ['woohoo.txt', 'wahoo.txt'] 

Javascript использует затворы, и поэтому переменное "расширение" доступно в области видимости функции, так как он доступен в родительском

Смежные вопросы