2016-06-16 9 views
0

Ich habe durch ein nodschool-Tutorial gearbeitet: learnyounode, die here gefunden werden kann. Ich arbeitete an Herausforderung fünf (FILTERED LS).So finden Sie die Liste der Dateien mit bestimmten Erweiterung von einem Array

Die Herausforderung war:

Erstellen Sie ein Programm, das eine Liste von Dateien in einem bestimmten Verzeichnis druckt, durch die Erweiterung der Dateien gefiltert. Sie erhalten einen Verzeichnisnamen als erstes Argument für Ihr Programm (z. B. '/ path/to/dir /') und eine Dateierweiterung, nach der nach dem zweiten Argument gefiltert wird.

Dies ist mein Code so weit:

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); 
    }); 

Wie kann ich effektiv alle Dateien herauszufiltern, die als Konsole Argument angegeben werden? Hat es etwas mit path.extname zu tun? Wenn das so ist, wie? Ich habe versucht, .filter() zu verwenden, aber das scheint nicht zu funktionieren. Könnte mir jemand auch erklären, wie .filter() genauso gut funktioniert wie seine Argumente, da ich die Dokumentation als etwas verwirrend empfunden habe. Gibt es schließlich eine bessere Möglichkeit, die Elemente eines Arrays auf separaten Zeilen als console.log() auszugeben?

Dank

+0

Versuchen [MDN] (https verfügbar: // developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) –

Antwort

0

Es ist wie Ihre Benutzung .filter aussieht() - statt den Namen der Erweiterung als Argument der Funktion bereitstellt, benötigen Sie einen Rückruf zu liefern, die auf jedem Element der Liste aufgerufen wird, und geben nur die Werte zurück, die einen bestimmten Test bestehen (in diesem Fall ist die Dateierweiterung in der Zeichenfolge vorhanden).

Zum Beispiel

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'] 

uses Javascript Schließungen und so die Variable "Erweiterung" ist zugänglich in dem Funktionsumfang, da es in den übergeordneten