반응형
each
지난번 _map 함수와 _filter 함수에도 똑같이 중복되는 부분이 있었다.
중복제거를 하는 each함수를 만들어본다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <script> function _filter(list,predi){ var new_list = []; for(var i=0;i< list.length;i++){ if(predi(list[i])){ new_list.push(list[i]); } } } function _map(list, mapper){ var new_list = []; for(var i = 0; i < list.length;i++){ new_list.push(mapper(list[i])); } } </script> |
[기존 코드]
_filter함수는 어떤 배열(list)에서 어떤기준으로 필터링할 함수(predi)를 받아서 새로운 배열을 리턴해주는 것이었고,
_map함수는 필터링된 배열에서 다른 값을 가져오는 mapper 함수를 받아 새로운 배열을 리턴해주었다.
* 여기서 겹치는 부분인 for 반복문과 list[i]와 같이 해당 i번째 값을 찾는 두가지를 each를 통해 중복제거를 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <script> function _each(list, iter){ for(var i = 0; i < list.length; i++){ iter(list[i]); } return list; } function _filter(list, predi){ var new_list = []; _each(list,function(val){ if(predi(val)) new_list.push(val); }); return new_list; } function _map(list, mapper){ var new_list = []; _each(list,function(val){ new_list.push(mapper(val)); }); return new_list; } </script> |
[_each함수와 변경된 _filter, _map 함수]
_each함수는 어떤 배열을 받아 그대로 리턴하는 함수고, 이터레이터 반복자로 해당 값들을 순회하는 함수다.
- console.log(_filter(users,function(user){return user.age >= 30;}));
유저의 나이가 30세 이상인 유저들을 리턴하는 _filter 함수를 똑같이 실행해보면 알 수 있다.
새로운 _filter함수는 여전히 배열(list)과 predi(필터함수)를 인자로 받고 있고
_each함수는 배열(list)과 그 배열을 반복하면서 접근할 iter 메서드를 인자로 받는다.
_filter함수 내에서 보면 val에 list[i]가 들어간다고 보면된다. iter가 곧 function(val) {...}이 되기때문.
반응형
'Javascript > 함수형 프로그래밍' 카테고리의 다른 글
커링 (curry, curryr, get) (4) | 2017.09.21 |
---|---|
함수형 프로그래밍의 장점, 다형성!(어떤 객체에만 적용가능한 메서드가 아닌 함수를 생성한다) (0) | 2017.09.20 |
함수형 프로그래밍으로 map, filter를 만들어보자(함수를 인자로 쓰기) (0) | 2017.08.26 |
일급 함수란? (함수를 객체처럼 다룬다, 일급 객체(first-class)) (0) | 2017.08.24 |
순수 함수란? (함수형 프로그래밍의 뿌리, 함수의 부수효과를 없앤다) (4) | 2017.08.23 |