문제
배열, 콜백 함수, 그리고 초기값을 인수로 전달받는 자바스크립트 함수를 작성해야 합니다.
이 함수는 배열을 순회하면서 값을 계속 누적하고, 최종적으로 누적된 결과값을 반환해야 합니다. 즉, Array.prototype.reduce() 메서드와 동일한 방식으로 동작하도록 직접 구현하는 것이 목표입니다.
reduce의 기본 동작 원리는 다음과 같습니다.
- 누산기(accumulator)에 현재 값을 반복적으로 연산하여 저장합니다.
- 초기값이 제공되면 그 값부터 시작하고, 제공되지 않으면 배열의 첫 번째 요소를 초기값으로 사용합니다.
예제
다음은 이를 직접 구현한 코드입니다 −
const arr = [1, 2, 3, 4, 5];
const sum = (a, b) => a + b;
Array.prototype.customReduce = function(callback, initial){
if(!initial){
initial = this[0];
};
let res = initial;
for(let i = initial === this[0] ? 1 : 0; i < this.length; i++){
res = callback(res, this[i]);
};
return res;
};
console.log(arr.customReduce(sum, 0));코드 설명: customReduce는 먼저 초기값이 전달되었는지 확인하고, 없다면 배열의 첫 번째 요소를 초기값으로 설정합니다. 이후 반복문을 통해 각 요소마다 콜백 함수를 호출하여 결과를 누적합니다. 초기값이 첫 번째 요소인 경우에는 이미 해당 요소가 처리된 것이므로 인덱스 1부터 순회를 시작합니다.
출력
콘솔 출력 결과는 다음과 같습니다 −
15