learnyounode FILTERED LS

时间:2014-09-27 08:51:12

标签: node.js

编写此代码的方法有很多,但我无法理解为什么我的版本无效。

程序应该从命令行获取2个参数。第一个是包含文件的文件夹的路径,第二个是文件扩展名。输出应仅打印与第二个参数具有相同扩展名的文件。 当我尝试使用2个参数执行此代码时,我得到一个空输出。

var fs=require('fs');
var path=require('path');
var filepath=process.argv[2];
var ext="."+process.argv[3];

fs.readdir(filepath,function(err,list) {
  if (err) throw err;
  for (var i=0;i<list.length-1;i++) {
    if (("."+path.extname(list[i]))==ext) {
      console.log(list[i]);
    }
  }
});

2 个答案:

答案 0 :(得分:0)

请删除&#39; utf-8&#39;,您只需要输入类型(并阅读文档http://nodejs.org/api/fs.html#fs_fs_readdir_path_callback):

 fs.readdir(filepath,function(err,list){

答案 1 :(得分:0)

path.extname()返回带有点的扩展名,如下所示:link;不需要"."+path.extname。 考虑循环初始化的方式时,for循环中的list.length-1没有多大意义。 list.length是正确的选择。

有关如何解决此问题的参考,请参见下面的代码

var fs = require("fs")
var path = require("path")
var pathToUse = process.argv[2]
var ext = "."+process.argv[3]

fs.readdir(pathToUse, function(err, files){

if(err){
  throw err;
}
else{
var filteredFiles = files.filter(function(file){

    if(path.extname(file) === ext){
      return true;
     }
    else{ 
         return false;
        }
});
for(var x = 0; x < filteredFiles.length; x++){
console.log(filteredFiles[x];
}
}
});