문제 정의
숫자로 이루어진 배열을 입력받아, 배열 내 모든 숫자의 평균값을 계산하는 JavaScript 함수를 작성해야 합니다. 여기서 유일한 조건은 반드시 Array.prototype.reduce() 메서드를 사용해야 한다는 점입니다.
reduce() 메서드의 동작 원리
reduce()는 배열의 각 요소를 순회하면서 콜백 함수를 실행하고, 그 결과를 누적값에 더해 최종적으로 하나의 값으로 반환하는 고차 함수입니다. 콜백 함수는 다음 네 가지 인수를 받습니다.
- acc (누적값): 이전 콜백 호출에서 반환된 값
- value (현재값): 현재 처리 중인 배열 요소
- index (인덱스): 현재 요소의 인덱스
- array (원본 배열): reduce()가 호출된 배열 자체
구현 예제
const arr = [129, 139, 155, 176];
const calculateAverage = (arr = []) => {
const reducer = (acc, value, index, array) => {
let val = acc + value;
if (index === array.length - 1) {
return val / array.length;
};
return val;
};
const res = arr.reduce(reducer, 0);
return res;
};
console.log(calculateAverage(arr));
코드 설명
동작 과정을 단계별로 살펴보면 다음과 같습니다.
reducer함수는 매번acc + value를 통해 지금까지의 누적합을 계산합니다.- 현재 인덱스가 마지막 요소(
index === array.length - 1)라면, 누적합을 배열 길이로 나누어 평균값을 반환합니다. - 초기값으로
0을 전달했기 때문에 누적 계산이 안전하게 시작되며, 별도의 변수 없이 reduce() 호출 한 번으로 결과를 얻을 수 있습니다.
실행 결과
콘솔에는 다음과 같이 출력됩니다.
149.75
(129 + 139 + 155 + 176) ÷ 4 = 599 ÷ 4 = 149.75로, 올바른 평균값이 반환되는 것을 확인할 수 있습니다.