결과를 만드는 함수 reduce, take


map이나 filter함수가 배열이나 이터러블한 모나딕한 값에 내부에 있는 원소들에게 함수들을 합성해놓는 역할을 한다면, reduce나 take는 최종적으로 결과를 만들어내는 함수입니다.

map이나 filter같은 함수들은 지연성을 가질 수 있고, reduce나 take는 결과를 만드는 시작점을 만들기 때문에 iterator의 값을 꺼내어 연산을 시작합니다. take함수는 지연성을 가질 수도 있지만, 몇개로 떨어질지 모르는 배열에서 특정 갯수만큼 배열로 축약 및완성하는 특성이 있기 때문에 지연성을 가지기보단 함수가 호출된 시점에 연산이 이루어지는 것이 더 낫습니다.


queryStr 함수 만들기


결과를 만드는 함수 reduce를 응용해서 객체로부터 url의 queryString을 만드는 함수 queryStr을 만들어봅니다.

const queryStr = pipe(
    Object.entries,
    map(([k,v])=>`${k}=${v}`),
    reduce((a,b)=>`${a}&${b}`)
);
log(queryStr({limit: 10, offset:10, type: 'notice'})); // limit=10&offset=10&type=notice

Array.prototype.join보다 다형성이 높은 join함수


기존 Array에서 제공하는 join 함수는 지연평가를 제공하지않습니다. 그렇기 때문에 지연성도 제공하여 더 다형성이 높은 join함수를 만들어 봅시다.