표 2-2 초기 값이 있는 reduce( ) 계산표
a(누적 값) |
0 |
1 |
3 |
6 |
10 |
c(현재 값) |
1 |
2 |
3 |
4 |
5 |
a + c(반환값) |
1 |
3 |
5 |
10 |
15 |
마지막 반환값인 15가 reduce() 메서드의 결과 값이 됩니다. 메서드는 배열의 모든 요소를 한 번씩 사용하고 있습니다. 즉, reduce()도 일종의 반복문 역할을 합니다.
만약 초기 값을 제공하지 않으면 실행 순서가 어떻게 바뀔까요?
[1, 2, 3, 4, 5].reduce((a, c) => {
return a + c;
}); // 15
reduce() 메서드에 초기 값을 제공하지 않으면 첫 번째 요소의 값인 1이 초기 값이 됩니다. 초기 값은 첫 번째 누적 값으로 들어갑니다. 이때는 두 번째 요소부터 reduce()를 적용하게 됩니다. 따라서 누적 값(a)이 1, 현재 값(c)이 2인 상태로 함수가 시작됩니다. 이때 반환값인 3은 다음 번 누적 값이 됩니다.