2016-06-16 8 views
0

私はノードスクールのチュートリアルlearnyounodehere)で作業しています。私はチャレンジ5(FILTERED LS)に取り組んでいました。配列から特定の拡張子を持つファイルのリストを見つける方法

ファイルの拡張子によってフィルタリング指定されたディレクトリ内のファイルのリストを出力し、プログラムを作成します。

挑戦はこれでした。プログラムの最初の引数としてディレクトリ名(たとえば、 '/ path/to/dir /')と、2番目の引数としてフィルタリングするファイル拡張子が提供されます。

これは、これまでの私のコードです:

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()よりも別の行に配列の要素を出力するより良い方法がありますか?それは.filterの使用状況(ように見える

おかげ

+0

試してみてください[MDN](https://でdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) –

答えて

0

) - 代わりに、関数の引数として拡張名を提供する、あなたがリストの各要素に対して呼び出されるコールバックを指定する必要があり、特定のテストに合格した値だけを返します(この場合、ファイル拡張子は文字列内にあります)。例えば

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がクロージャを使用し、それは親で利用可能であるため、その変数 "拡張子" は、関数スコープでアクセス

関連する問題