본문 바로가기

JAVA HTML JAVASCRIPT/소오스

_.filter( ) 함수

728x90
반응형

underscore.js의 collection 중에서 _.filter( ) 함수에 대해 알아보자.

filter _.filter(list, predicate, [context])list: colletion으로써, 배열이나 객체가 될 수 있다.

predicate: list의 각 element(value)의 결과값이 truth인지 확인하는 test 함수이다.

[context]: predicate 함수에서 this로 바인딩 되는 것이다.(생략가능)--> list의 각 element(value)를 predicate 함수를 돌려, 
값이 truth인 것만 배열의 element로 리턴한다.

 

[예제]

  • [context]가 생략될 경우
<list가 배열일 경우>
var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){
	return num % 2 == 0; 
});

console.log(evens); 

// [2, 4, 6]
// 배열 [1, 2, 3, 4, 5, 6]의 각 element가 test 함수의 num의 인자로 하나씩 들어가, 결과 값이 truth인 값만 모아 배열의 형태로 출력된다.

<list가 객체일 경우>
var obj = {"a": 1, "b": 2, "c": 3, "d":4}
var evens = _.filter(obj, function(num){ 
	return num % 2 == 0; 
});

console.log( evens ); 
// [2, 4]
// 객체 obj의 각 value가 test 함수의 num의 인자로 하나씩 들어가, 결과 값이 truth인 값만 모아 배열의 형태로 출력된다.
  • [context]가 입력될 경우
더보기

A = [5, 7, 10, 15];var divideBy5 = _.filter([0,1,2,3], function(item) {

return this[item] % 5 == 0 ;

}, A)console.log(divideBy5);

// [0, 2, 3]

// 배열 [0,1,2,3]의 각 element가 test 함수의 item의 인자로 하나씩 들어가, 결과 값이 truth인 값만 모아 배열로 출력되는데, 이때 [context]로 사용된 A는 test 함수안에 있는 this로 바인딩 되어 사용된다.

 

[구현]

_.filter() 함수를 직접 구현해보자.

 

<알고리즘>

  • 함수의 인자로 collection과 test를 가져온다.
  • 최종 리턴 값이 배열이기 때문에, 빈 배열을 선언한다.
  • _.each() 함수를 사용하여, 각 collection의 element(value)가 test 함수에서 truth인지 확인한다.
  • truth이면, 그 element(value)를 빈 배열에 추가한다.
  • 최종 배열을 리턴한다.
더보기

_.filter = function(collection, test) {

var result = [];

_.each(collection, function(elem) {

if(test(elem)) {

result.push(elem);

}

});

return result;

};

728x90
반응형