filter 메소드는 이름 그대로 요소들을 걸러내는 것이 목적입니다. 예제를 봅시다.
정수 배열에서 5의 배수인 정수만 모으기
var arr = [4, 15, 377, 395, 400, 1024, 3000];
var arr2 = arr.filter(function (n) {
return n % 5 == 0;
});
console.log(arr2);
// [15, 395, 400, 3000]
콜백 함수의 리턴은 boolean을 가집니다.
리턴이 true인 요소만 모아서 새로운 배열을 만듭니다.
생략하면? 리턴은 undefined이므로 false가 됩니다.
만족하는 요소가 없다면? 빈 배열이 반환됩니다.
var arr = [4, 377, 1024];
var arr2 = arr.filter(function (n) {
return n % 5 == 0; });
console.log(arr2);
// [ ]
undefined도 아닌 빈 배열을 반환하는 것은 매우 큰 의미를 가집니다
보통 도메인을 해결하기 위해서 Array 메소드를 여러개 연결하여 사용하는데 빈 배열이라도 반환 함으로써 중간에 오류가 나지 않고 다음 Array 메소드를 사용할 수 있습니다.
// 5의 배수만 구해서 각 요소를 2배
var arr = [4, 15, 377, 395, 400, 1024, 3000];
var arr2 = arr.filter(function (n) {
return n % 5 == 0;
}).map(function (n) {
return n * 2; });
console.log(arr2);
// [30, 790, 800, 6000]
이상적인 입력 값은 위와 같겠지만.. 현실은 그렇지 않죠
=================================
// 5의 배수만 구해서 각 요소를 2배
var arr = [4, 377, 1024];
// 5의 배수가 없음.
var arr2 = arr.filter(function (n) {
return n % 5 == 0;
}).map(function (n) {
// filter로부터 빈 배열이 반환됨.
return n * 2; });
console.log(arr2);
// [ ]. map의 콜백 함수는 결국 한 번도 호출되지 않았으나 문제 없음.
만약 filter로부터 빈 배열이 아닌 결과 없음을 의미하는 다른 값이 반환되었다면 에러를 뿜었을 것입니다.
출처: https://bblog.tistory.com/300 [편두리 기업블로그]
comment