함수형에서 for 와 if 의 변화
1. for에서 filter로 if에서 predicate로
1) 기존 문장
var
users = [
{id :1, name :
'ID'
, age:32},
{id :2, name :
'ha'
, age:30},
{id :3, name :
'bj'
, age:29},
]
//30살 이하의 데이터를 추출하여 새로운 배열에 넣는다
var
temp_user = [];
for
(
var
i = 0, len = users.length; i<len; i++){
if
(users[i].age<30){
temp_user.push(users[i]);
}
}
console.log(temp_user.length);
2) filter 함수로 변환
var
users = [
{id :1, name :
'ID'
, age:32},
{id :2, name :
'ha'
, age:30},
{id :3, name :
'bj'
, age:29},
]
function
filter(list, predicate){
var
new_list = [];
for
(
var
i = 0, len = list.length; i<len; i++){
if
(predicate(list[i])){
new_list.push(list[i]);
}
}
return
new_list;
}
var
users_under_30 = filter(users,
function
(user) {
return
user.age < 30 });
var
users_over_30 = filter(users,
function
(user){
return
user.age > 30});
console.log(users_under_30.length);
- 새로운 배열을 생성하여 반환한다.
- predicate 함수를 이용하여 원하는 반환 값을 얻는다.
2. 중복 코드를 map 함수로 제거한다
1) 기존 문장
var
ages = [];
for
(
var
i = 0, len = temp_user.length; i<len; i++){
ages.push(temp_user[i].age);
}
console.log(ages);
- 새로 만든 배열에서 이름을 추출한다.
2) map 함수로 변환
function
map(list, iteratee){
var
new_list = [];
for
(
var
i=0, len = list.length; i<len; i++){
new_list.push(iteratee(list[i]))
}
return
new_list;
}
var
ages = map(users_under_30,
function
(user){
return
user.age});
var
name = map(filter(users,
function
(user) {
return
user.age < 30 }),
function
(user){
return
user.name});
console.log(ages);
- 코드가 더욱 단순해 졌다. 또한 함수를 합쳐서 실행결과로 바로 실행할 수 있다.
3. 클로저를 이용한 map 함수 줄이기
1) 클로저 함수 패턴
function
bvalue(key){
return
function
(obj){
return
obj[key];
}
}
var
b = bvalue(
'b'
);
console.log(b({a:
'hi'
,b:
'hello'
}));
console.log(bvalue(
'a'
)({a:
'hi'
,b:
'hello'
}));
2) filter, map, bvalue
var
name = map(filter(users,
function
(user) {
return
user.age < 30 }), bvalue(
'name'
));
- 더욱 간결해 졌다.
'BooksReview > Functional Javascript' 카테고리의 다른 글
[함수형자바스크립트] 한번만 실행되는 함수 _.once() (0) | 2018.01.30 |
---|---|
[함수형자바스크립트] _.identity(), _.values(), _.keys() 구현 (0) | 2018.01.30 |
[함수형 자바스크립트] _,map(), getLength(), isArrayLike() 구현 (0) | 2018.01.23 |
[함수형 자바스크립트] 클로저란? (0) | 2018.01.08 |