
const array1 = [1, 2, 3, 4];
// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce(
(previousValue, currentValue) => previousValue + currentValue,
initialValue
);
console.log(sumWithInitial);
arr.reduce(callback[, initialValue])
callback
배열의 각 요소에 대해 실행할 함수. 다음 네 가지 인수를 받습니다.
accumulator(acc)
누산기는 콜백의 반환값을 누적합니다. 콜백의 이전 반환값 또는, 콜백의 첫 번째 호출이면서 initialValue를 제공한 경우에는 initialValue의 값입니다.
currentValue(cur)
처리할 현재 요소.
initialValue가 설정되어 있지 않으므로 accumulator의 초기값은 0번째 index의 값인 1이며, index 1부터 순회합니다.
순회하면서 배열 요소의 값을 누산기(accumulator)에 누적합니다.
let arr = [1, 2, 3, 4, 5];
let totalValue = arr.reduce(function(accumulator, currentValue, index) {
console.log(`*****${index}번째 index*****`);
console.log(`accumulator : ${accumulator}`);
console.log(`currentValue : ${currentValue}`);
console.log('\n');
return accumulator + currentValue;
})
console.log(`totalValue : ${totalValue}`);

객체 배열에서 initialValue를 설정하지 않으면, accumulator가 객체이므로 정상적으로 계산이 되지 않다.
let arr = [{value : 1}, {value : 2}, {value : 3}];
let totalValue = arr.reduce(function(accumulator, currentValue, index) {
console.log(`*****${index}번째 index*****`);
console.log(accumulator);
console.log(currentValue);
console.log('\n');
return accumulator + currentValue.value;
})
console.log(`totalValue : ${totalValue}`);

initialValue를 설정하여 위 코드를 정상적으로 동작하도록 처리
accumulator은 initialValue의 값으로 초기화되고 index 0부터 순회를 시작한다.
let arr = [{value : 1}, {value : 2}, {value : 3}];
let totalValue = arr.reduce(function(accumulator, currentValue, index) {
console.log(`*****${index}번째 index*****`);
console.log(accumulator);
console.log(currentValue);
console.log('\n');
return accumulator + currentValue.value;
}, 0)
console.log(`totalValue : ${totalValue}`);
출처: https://developer-talk.tistory.com/146 [평범한 직장인의 공부 정리:티스토리]
[JavaScript]reduce함수 사용 방법 | 출처: https://developer-talk.tistory.com/146