숫자로 이루어진 배열의 배열(중첩 배열)을 입력받아, 각 하위 배열의 평균값을 계산한 뒤 새로운 배열에 해당 인덱스 순서대로 담아 반환하는 JavaScript 함수를 작성해 보겠습니다.
예를 들어 다음과 같은 배열이 있다고 가정해 봅시다.
const arr = [
[1],
[2,3],
[4,5,6,7]
];동작 원리
이 문제는 두 단계로 나누어 해결할 수 있습니다.
1. 단일 배열의 평균 계산하기
reduce() 메서드를 사용하면 배열 요소들의 합계를 손쉽게 구할 수 있습니다. 합계를 배열의 길이로 나누면 평균값이 됩니다.
2. map()으로 전체 배열 순회하기
map() 메서드를 사용하면 외부 배열의 각 하위 배열에 평균 계산 함수를 적용하고, 그 결과를 새로운 배열로 만들 수 있습니다.
예제 코드
전체 코드는 다음과 같습니다.
const arr = [
[1],
[2,3],
[4,5,6,7]
];
// 단일 배열의 평균을 계산하는 함수
const average = (arr = []) => {
const sum = arr.reduce((a, b) => a + b);
return sum / arr.length;
}
// 각 하위 배열의 평균을 새 배열로 반환하는 함수
const averageWithin = (arr = []) => {
const res = arr.map(el => average(el));
return res;
};
console.log(averageWithin(arr));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[ 1, 2.5, 5.5 ]
코드 설명
각 하위 배열의 평균은 다음과 같이 계산됩니다.
- [1] → 1 ÷ 1 = 1
- [2, 3] → (2 + 3) ÷ 2 = 2.5
- [4, 5, 6, 7] → (4 + 5 + 6 + 7) ÷ 4 = 5.5
이처럼 reduce()와 map()을 조합하면 별도의 반복문 없이 간결하고 가독성 좋은 코드로 중첩 배열의 평균값을 구할 수 있습니다.