정수로 이루어진 배열의 배열(2차원 배열)이 있다고 가정해 보겠습니다.
const arr = [
[1, 2, 3],
[4, 5, 6]
];우리는 이러한 배열의 배열을 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 각 하위 배열의 평균을 개별적으로 계산한 뒤, 모든 평균값들의 합계를 반환해야 합니다.
따라서 위 배열의 경우 첫 번째 하위 배열 [1, 2, 3]의 평균은 2이고, 두 번째 하위 배열 [4, 5, 6]의 평균은 5이므로 출력 결과는 다음과 같아야 합니다.
2 + 5 = 7
구현 예제
이 문제는 reduce() 메서드를 활용하면 깔끔하게 해결할 수 있습니다. 바깥쪽 reduce로 각 하위 배열의 평균을 누적하고, 안쪽 reduce로 각 하위 배열 요소의 총합을 구하는 방식입니다.
const arr = [
[1, 2, 3],
[4, 5, 6]
];
const sumAverage = (arr = []) => {
const average = arr.reduce((acc, val) => {
const total = val.reduce((total, num) => total += num, 0);
return acc += total / val.length;
}, 0);
return Math.round(average);
};
console.log(sumAverage(arr));코드 설명
동작 과정을 단계별로 살펴보면 다음과 같습니다.
1단계: 바깥쪽 reduce()가 배열의 각 하위 배열(val)을 순회합니다.
2단계: 안쪽 reduce()가 현재 하위 배열의 모든 요소를 더해 총합(total)을 계산합니다.
3단계: 총합을 하위 배열의 길이(val.length)로 나누어 평균을 구하고, 이를 누적값(acc)에 더합니다.
4단계: 최종 누적된 값에 Math.round()를 적용하여 반올림한 결과를 반환합니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
7
이처럼 reduce()를 중첩하여 사용하면 별도의 반복문 없이도 간결하고 가독성 좋게 하위 배열별 평균의 합계를 계산할 수 있습니다.