reduce()메서드

expenses내의 amount를 모두 더해야하는데, for문말고 Array의 reduce() 메서드를 이용해보자.

리듀스함수는 JS말고도 자바 스트림등에서도 자주 보이는 메서드이다..

리듀스는 보통 네개의 인자를 갖는다.

  1. 누산기(매번 진행될 기능을 담은 함수)
  2. 현재 값
  3. 현재 인덱스 (생략 가능)
  4. 원본 배열(대상 배열) (생략 가능)
 <p className="main-total">
          총 지출 :
          <span>
            {expenses.reduce((acc, curr) => {
              return (acc += curr.amount);
            }, 0)}
            원
          </span>
        </p>

위에서 누산기는

(add, curr) => { return (acc += curr.amount);}

이다. 현재값은 0임.

나는 사실… curr가 어떻게 amount필드를 갖고 있는건지 이해가 안된다. curr는 그냥 인자인거 아닌가?

image.png

리듀스 함수 자체가 이렇게 설계되어있는걸까? 즉… 리듀스 함수는 그 내부의 콜백까지 설계되어있는걸까? 그래서 리듀스의 콜백의 두번째 인자는 항상 리듀스를 호출한 배열의 각 원소들을 가리키게 되는걸까? 이게 아니면 설명이 안된다.

수정 기능