숫자로 이루어진 배열들의 배열(2차원 배열)을 입력받아, 각 하위 배열의 평균값을 담은 새로운 배열을 반환하는 getAverage() 함수를 작성해 보겠습니다.
구현 방법
핵심 아이디어는 간단합니다. 원본 배열에 map()을 사용하여 각 하위 배열을 순회하고, reduce()를 활용해 하위 배열의 요소들을 합산하여 평균을 계산하는 것입니다.
예제 코드
const arr = [[1,54,65,432,7,43,43, 54], [2,3], [4,5,6,7]];
const secondArr = [[545,65,5,7], [0,0,0,0], []];
const getAverage = (arr) => {
const averageArray = arr.map(sub => {
const { length } = sub;
return sub.reduce((acc, val) => acc + (val/length), 0);
});
return averageArray;
}
console.log(getAverage(arr));
console.log(getAverage(secondArr));코드 설명
이 코드가 동작하는 방식을 단계별로 살펴보면 다음과 같습니다.
1. map()으로 하위 배열 순회: arr.map(sub => ...)를 통해 각 하위 배열(sub)에 접근합니다.
2. 구조 분해 할당으로 길이 추출: const { length } = sub;는 하위 배열의 길이를 깔끔하게 추출하는 구조 분해 할당 문법입니다.
3. reduce()로 평균 계산: 각 요소를 더할 때 미리 val / length로 나누어 누적하므로, 마지막에 다시 나눌 필요 없이 바로 평균값을 얻을 수 있습니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[ 87.375, 2.5, 5.5 ] [ 155.5, 0, 0 ]
주목할 점은 빈 배열 []이 포함된 경우입니다. reduce()의 초기값이 0으로 설정되어 있기 때문에 빈 배열에 대해서도 오류 없이 0을 반환합니다. 초기값을 지정하지 않으면 빈 배열에서 reduce() 호출 시 에러가 발생하므로, 이처럼 초기값을 명시하는 것이 안전한 코딩 습관입니다.