[개념잡기] 컬렉션 중심 프로그래밍 - (2) 거르기 (filter, reject, compact)
서론
컬렉션 중심 프로그래밍의 두번째 거르기에 대해 알아보도록 하겠다.
수집하기의 기본이 되는 함수는 filter
함수이다.
var _filter = _curryr((list, predi) => {
var new_list = []
_each(list, (val) => {
if(predi(val)) {
new_list.push(val)
}
})
return new_list
})
console.log(
_filter(users, function(user) {
return user.age > 30
})
)
컬렉션 중심 프로그래밍
reject
- 기대동작 :
filter
함수의 반대 동작으로 조건에 맞지 않는 값들을 리스트로 리턴 - 코드 작성
//reject
var _reject = (data, predi) => {
return _filter(data, function(val) {
return !predi(val)
})
}
filter
함수의 predi 함수의 값을 반전해서 코드를 작성하였다.
- 코드 개선
var _reject = (data, predi) => {
return _filter(data, _nagate(predi))
}
var _nagate = (func) => {
return function(val) {
return !func(val)
}
}
console.log(
_reject(users, function(user) {
return user.age > 30
})
)
// 0: {id: 1, name: "ID", age: 29}
// 1: {id: 2, name: "QW", age: 30}
// 2: {id: 5, name: "RT", age: 21}
// 3: {id: 6, name: "DF", age: 28}
// 4: {id: 8, name: "IS", age: 25}
반전된 함수를 리턴하는 nagate
함수를 이용하여 코드 개선을 해보았다.
compact
- 기대동작 : 인자로 받은 리스트에서 참값만 걸러 리스트 반환
- 코드 작성
var _compact = _filter(_identity)
console.log(
_compact([0, 1, 2, null, {}, false, true])
)
// (4) [1, 2, {…}, true]
전에 만들었던 identity
함수를 이용하여 넘겨 받은 값을 그대로 predi
함수에 넣어 false, 0, null 등은 if 문에서 걸러지게 하였다.
마무리
오늘 작성한 함수
// reject
var _reject = (data, predi) => {
return _filter(data, _nagate(predi))
}
// nagate
var _nagate = (func) => {
return function(val) {
return !func(val)
}
}
// compact
var _compact = _filter(_identity)
'Study > VanillaJS' 카테고리의 다른 글
[개념잡기] 컬렉션 중심 프로그래밍 - (4) 접기 (min_by, max_by, group_by, count_by) (0) | 2019.03.13 |
---|---|
[개념잡기] 컬렉션 중심 프로그래밍 - (3) 찾아내기 (find, find_index, some, every) (0) | 2019.03.12 |
[개념잡기] 컬렉션 중심 프로그래밍 - (1) 수집하기 (map, values, plunk) (0) | 2019.03.11 |
[개념잡기] 함수형 프로그래밍 - (9) 마무리 (0) | 2019.03.09 |
[개념잡기] 함수형 프로그래밍 - (8) 다형성 높이기 (0) | 2019.03.08 |