reduce()는 배열의 각 요소에 대해 reducer 함수를 실행하고, map()
과 filter()
와 다르게 배열이 아닌 하나의 결과 값만 반환한다. reduce()의 인자 값은 callback[, initivalValue]
로 callback의 경우는 reducer라고 불리며 accumulator, currentValue, currentIndex, array와 같은 인자를 받는다. accumulator
은 값을 누적하는 누산기이고, currentValue
는 현재 요소의 값을 말한다. currentIndex와 array는 필수 입력 값은 아니다. reduce()
는 매우 다양한 케이스로 활용될 수 있다.
const customReduce = (array, callback, initialValue) => {
accumulator = initialValue
if (accumulator === undefined) {
accumulator = array[0]
for (let i = 1; i < array.length; i++) {
accumulator = callback(accumulator, array[i])
}
} else {
for (let i = 0; i < array.length; i++) {
accumulator = callback(accumulator, array[i])
}
}
return accumulator
}
array와 적용할 callback 함수, initialValue를 받아서 initialValue 제공 여부에 따라 분기처리 하였다.
initialValue를 제공하지 않으면, reduce()는 인덱스 1부터 시작해서 콜백 함수를 실행하고 첫 번째 인덱스는 건너 뛴다.
initialValue를 제공하면 인덱스 0에서 시작한다, 그리고 연산의 결과를 계속 accumulator
변수에 누적 저장해서 반환한다. reduce 함수는 다양한 목적을 위해 다양한 형태로 사용되기 때문에, 특히 객체를 다루고 조작할 때 많이 쓰인다고 한다.
출처