min, max
제일 작은 값을 반환
제일 큰 값을 반환
function min(list){
return reduce(list, (a, b)=> a > b ? b : a);
}
function max(list){
return reduce(list, (a, b)=> a < b ? b : a);
}
const numArr = [-10,10,20,30,-20,-50,66];
console.log(_.min(numArr));
console.log(_.max(numArr));
min, max 는 숫자인 값만 처리가 가능하다. 제한적으로 사용만 가능해 추상화 수준이 낮다.
min_by, max_by
보조함수를 인자로 받아 주어진 값에 적용한다. 적용하여 반환된 값을 기반으로 동작한다.
/*보조 함수를 인자로 받아, 그 반환값을 기준으로 평가한다.*/
function min_by(list,iter){
return reduce(list, (a, b)=> iter(a) > iter(b) ? b : a);
}
function max_by(list,iter){
return reduce(list, (a, b)=> iter(a) < iter(b) ? b : a);
}
console.log(_.min(numArr));
console.log(_.max(numArr));
console.log(_.min_by(users, user=>user.age));
console.log(_.max_by(users, _.get("age")));
적절한 보조함수만 주어진다면 어떠한 돌림직한 값도 처리할 수 있다.
group_by
주어진 조건으로 그룹핑한 결과를 반환하는 함수
/*주어진 조건으로 그룹핑한 결과를 반환하는 함수*/
function group_by(list,iter){
return reduce(list, (group, val) => {
//그룹화하려면 그룹 기준과 그룹화될 리스트 공간이 필요하다.
//그룹 기준에 충족하는 첫 그룹화라면 빈 배열을 넣어준다.
(group[iter(val)] = group[iter(val)] || [] ).push(val);
return group;
} ,{});
}
_.go(
users,
_.group_by(user=>user.age-(user.age%10)),
console.log
);
console.log(_.group_by(users,u=>u.age-(u.age%10)));
나이 대 별 그룹
count_by
group_by의 개수 버전
/*주어진 조건으로 그룹핑한 결과를 개수로 반환하는 함수*/
function count_by(list,iter){
return reduce(list, (group, val) => {
group[iter(val)] = group[iter(val)]+1 || 1;
return group;
} ,{});
}
_.go(
users,
_.count_by(user=>user.age-(user.age%10)),
console.log
);
console.log(_.count_by(users,u=>u.age-(u.age%10)));
_.go(
users,
_.count_by(user=>user.age%2),
console.log
);
'개발 > 함수형 프로그래밍' 카테고리의 다른 글
자바스크립트 함수형 코드 자바화 해보기 - filter, map, each (0) | 2023.06.21 |
---|---|
11 - each, map 개선, 마무리 (0) | 2023.06.20 |
09 - 컬렉션 중심 프로그래밍 - find(찾기) (0) | 2023.06.18 |
08 - 컬렉션 중심 프로그래밍 - filter(거르기) (0) | 2023.06.18 |
07 - 컬렉션 중심 프로그래밍 - map (수집하기) (0) | 2023.06.17 |