자바스크립트 reduce는 배열의 각 요소를 순회하며 콜백 함수가 실행된 값을 누적하여 하나의 값을 반환합니다.
arr.reduce(callback[, initialValue])
callback : 배열의 각 요소에 대해 실행할 함수. 4개의 인자를 받을 수 있습니다.
accumulator
콜백함수의 반환값을 누적합니다.
콜백의 이전 반환값 또는, 콜백의 첫 번째 호출이면서 initialValue를 제공한 경우에는 initialValue의 값입니다.
currentValue
처리할 현재 요소.
currentIndex (Optional)
처리할 현재 요소의 인덱스. initialValue를 제공한 경우 0, 아니면 1부터 시작합니다.
array (Optional)
reduce()를 호출한 배열.
initialValue (Optional)
callback의 최초 호출에서 첫 번째 인수에 제공하는 값입니다.
초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용합니다. 빈 배열에서 초기값 없이 reduce()를 호출하면 오류가 발생합니다.
기본 reduce 사용 예제 입니다.
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
}, 0);
console.log(sum); // 15
위의 코드를 그림으로 표현하면 다음과 같습니다.

빈 배열에 reduce를 사용하고, 초기값을 주지 않으면 오류가 발생합니다.
const emptyArray = [];
const sumOfEmptyArray = emptyArray.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
});
console.log(sumOfEmptyArray); // TypeError: Reduce of empty array with no initial value
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce