2016-06-16 3 views
0

노드 스 튜토리얼 learnyounode (here을 찾을 수 있음)을 통해 작업 해 왔습니다. 나는 도전 5 (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'] 

자바 스크립트 클로저를 사용하며 부모에서 사용할 수 있기 때문에 그래서 변수 "확장"기능 범위에 액세스 할 수

관련 문제