reduce() 메서드는 배열에 대하여 주어진 리듀서(reducer)함수를 실행하고 결과 값을 반환한다.
reduce()는 reduce(콜백함수, 초기값)와 같은 형태를 가지고 있으며, 배열의 각 요소가 주어진 콜백함수를 거치게 된다. 이 콜백함수를 리듀서(reducer) 라고 한다.
리듀서는 네가지 인자를 가진다.
accumulator(누산기): 누산기는 콜백(리듀서)의 반환 값을 누적한다. 만약 초기값이 제공된다면, 리듀서의 첫번째 호출 시 accumulator의 값은 초기값과 같다. 만약 초기값이 제공되지 않는다면 accumulator는 배열의 첫번째 값이 자동으로 들어가게된다.
currentValue: 현재 처리할 요소이다.
currentIndex(optional): 처리할 현재 요소의 인덱스이다. 초기값이 제공되지 않았다면 accumulator에 배열의 첫번째 값인 index 0의 값이 들어가고, currentIndex는 index 1부터 시작하게된다.
array(optional): reduce()를 호출한 배열
초기값은 최초의 리듀서 호출에서 accumulator(누산기)에 제공하는 값이다. 초기값이 없다면 배열의 첫번째 요소(0번 인덱스)를 사용하고 초기값이 있다면 주어진 초기값을 사용한다.
reduce()의 반환값은 각 요소가 리듀서를 거쳐 누적된 값의 결과 값이다.
초기값이 없다면 발생하는 경우
배열의 첫번째 요소(0번 인덱스)를 accumulator에 누적한 후 1번 인덱스부터 reducer를 거친다.
배열의 요소 값이 1개인데 초기값도 제공하지 않은 경우 or 초기값은 있지만 배열이 빈 배열인 경우에는 그 단독 값을 리듀서를 거치지 않고 바로 반환한다.
배열이 비었는데 초기값도 없는 상태에서 reduce()를 호출하면 TypeError 오류가 발생한다.
이렇게 초기값을 주지 않으면 발생할 수 있는 경우의 수가 3가지이므로 초기값은 주는 것이 안전하다.