如何从数组中查找具有特定扩展名的文件列表

CDu*_*uck 5 javascript arrays fs node.js

我一直在学习 Nodeschool 教程:learnyounode,可以在此处找到。我正在研究挑战五(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);
    });
Run Code Online (Sandbox Code Playgroud)

如何有效地过滤掉作为控制台参数给出的所有文件?它与path.extname有什么关系吗?如果是这样,怎么办?我尝试过使用.filter(),但这似乎不起作用。有人也能向我解释它的.filter()工作原理及其参数吗,因为我发现文档有点令人困惑。最后,是否有比 更好的方法在单独的行上输出数组的元素console.log()

谢谢

and*_*ood 3

看起来像您对 .filter() 的使用 - 您需要提供一个回调,该回调将在列表的每个元素上调用,而不是提供扩展名称作为函数的参数,并且仅返回传递特定值的值test(在这种情况下,文件扩展名存在于字符串中)。

例如

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'] 
Run Code Online (Sandbox Code Playgroud)

Javascript 使用闭包,因此变量“extension”可以在函数作用域中访问,因为它在父级中可用