reducer 함수 구현해보기

YOUNGJOO-YOON·2021년 10월 11일
0

JavaScript

목록 보기
9/25

종래의 사용법은 아래와 같고

[1,5,3].reduce((pre,cur)=>pre+cur,0) // 9=(((0+1)+5)+3)

구현물은 아래와 같다

const nums = [1, 3, 5, 7, 9];

  const reduce = (f, initial, iter) => {
    if(!iter){
    iter = initial[Symbol.iterator]();
    initial = iter.next().value;
    }
    for (const a of iter) {
      initial = f(initial, a);
    }
    return initial;
  };
  const add = (a, b) => a + b;
  console.log("qq", reduce(add, 0, nums));

굳이 이 함수를 구현한 이유는 아래와 같은 함수를 구현하기 위해서이다.

 const go = (...args) => {
    console.log(args)
    reduce((a,f)=>f(a),args)
  }
  go(0,a=>a+1,a=>a+2,a=>a+3,console.log); // 6

위 코드를 해석해보자.

...args는 인자들인 (0, f(), f(), f(), f()) 값들을 [0, f(), f(), f(), f()] 로 변환해준다.
위의 reduce 함수에 의해 args 배열의 0 번째 값인 0이 reduce 함수의 첫 인자인 a가 되고
그 다음 보조함수가 a=>a+1로 들어가게 된다.

따라서 reduce 함수가 문제 없이 실행되게 된다.

profile
이 블로그의 글은 제 생각을 정리한 글과 인터넷 어딘가에서 배운 것을 정리한 글입니다. 출처는 되도록 남기도록 하겠습니다. 수정 및 건의 오류 등이 있으면 언제든지 댓글 부탁드립니다.

0개의 댓글