[개념잡기] 함수형 프로그래밍 - (3) each
서론
배열을 순회하는 함수 each
를 만들어 보자
지난 포스팅까지 작성했던 코드
지난 포스팅에서는 filter
와 map
함수를 작성해보았다.
const _filter = (list, predi) => {
var new_list = []
for(var i = 0; i < list.length; i++) {
if(predi(list[i])) {
new_list.push(list[i])
}
}
return new_list
}
const _map = (list, mapper) => {
var new_list = []
for(var i = 0; i < list.length; i++) {
new_list.push(mapper(list[i]))
}
return new_list
}
이 두함수는 모두 배열을 순회한다는 공통점을 가지고 있는데 배열 순회 역할을 하는 함수를 만들어 보겠다.
함수형 프로그래밍
each
기존에 배열을 순회하는 로직은 for 문을 이용했다.
for(var i = 1; i < list.length; i++) {
...
}
이 부분을 모듈화하여 each
함수를 작성하면
const _each = (list, iter) => {
for(var i = 0; i < list.length; i++) {
iter(list[i])
}
}
첫번째 인자로는 순회할 배열, 두번째 인자로는 함수를 받아 배열을 순회하면서 해당 인덱스에 해당하는 값을 함수의 파라미터로 넘겨준다.
이제 each
함수를 filter
, map
함수에 적용해 보겠다.
코드 개선
const _filter = (list, predi) => {
var new_list = []
_each(list, (val) => {
if(predi(val)) {
new_list.push(val)
}
})
return new_list
}
const _map = (list, mapper) => {
var new_list = []
_each(list, (val) => {
new_list.push(mapper(val))
})
return new_list
}
const _each = (list, iter) => {
for(var i = 0; i < list.length; i++) {
iter(list[i])
}
}
'Study > VanillaJS' 카테고리의 다른 글
[개념잡기] 함수형 프로그래밍 - (5) reduce (0) | 2019.03.04 |
---|---|
[개념잡기] 함수형 프로그래밍 - (4) curry, curryr (0) | 2019.03.04 |
[개념잡기] 함수형 프로그래밍 - (2) map, filter (0) | 2019.03.03 |
[개념잡기] 함수형 프로그래밍 - (1) 시작 (0) | 2019.03.03 |
[개념잡기] e.preventDefault() 와 stopPropagation() 의 차이 (7) | 2018.10.22 |