[무료] 자바스크립트로 알아보는 함수형 프로그래밍 (ES5) - 인프런 | 강의

마플(http://www.marpple.com)의 CTO 유인동님이 알려주는 함수형 프로그래밍에 대한 강좌 입니다. 함수형 프로그래밍으로 라이브러리를 직접 만들어가며 함수형 프로그래밍의 패러다임과 코딩의 즐거

www.inflearn.com

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
);

function.html
0.01MB

 

+ Recent posts