reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer)함수를 실행하고, 하나의 결과값을 배열로 반환한다.
reduce는 초기값을 지정할 수 있는데 만약에 초기값을 정하지 않을 때는 배열의 0번째 요소가 초기값이 된다.
이 초기값은 누적값의 기반, 기초가 된다.
그리고 그 다음부터는 현재값이 되고, 함수에서 정의해놓은 작업을 배열의 끝 인덱스까지 반복하고, 반환하는 값은 배열의 누적값을 반환하게 된다.
- Accumulator (누적 값)
- Current Value (현재 값)
- Current Index (현재 인덱스)
- Source Array (원본 배열)
리듀서 함수의 반환 값은 Accumulator에 할당되고, Accumulator는 순회 중 유지되므로 결국 최종 결과는 하나의 값이 된다.
배열의 합을 구하는 리듀서 함수를 정의하고 리듀스로 실행시켜 보았다.
아래의 코드는 초기값을 지정하지 않았을 때와 초기값을 지정했을 때의 결과이다.
const arr1 = [1, 2, 3, 4];
const reducer = function(acc, curVal) {
return acc + curVal;
}
//1+2+3+4
console.log(arr1.reduce(reducer)); //10
//7+1+2+3+4
console.log(arr1.reduce(reducer, 7)); //17
배열의 값을 줄여서 하나의 값으로 만들어 주는 역할을 한다. 리턴값이 숫자, 배열, 객체이던간에 하나의 값으로 된다.