문제 상황
사람들에 대한 정보를 담고 있는 객체 배열이 주어졌을 때, 이 배열에서 age(나이) 속성의 평균값을 구하는 JavaScript 함수를 작성해야 합니다.
배열의 각 요소는 이름(fName)과 나이(age)를 포함하는 객체이며, 이 중 나이 값들을 모두 더한 뒤 사람 수로 나누어 평균 나이를 계산하면 됩니다.
풀이 방법
가장 효율적인 접근 방식은 reduce() 메서드를 활용하는 것입니다. reduce()를 사용하면 배열을 한 번만 순회하면서 합계(sum)와 개수(count)를 동시에 누적할 수 있습니다. 그런 다음 합계를 개수로 나누어 평균값을 반환합니다.
예제 코드
const people = [
{ fName: 'Ashish', age: 23 },
{ fName: 'Ajay', age: 21 },
{ fName: 'Arvind', age: 26 },
{ fName: 'Mahesh', age: 28 },
{ fName: 'Jay', age: 19 },
];
const findAverageAge = (arr = []) => {
const { sum, count } = arr.reduce((acc, val) => {
let { sum, count } = acc;
sum += val.age;
count++;
return { sum, count };
}, {
sum: 0, count: 0
});
return (sum / (count || 1));
};
console.log(findAverageAge(people));코드 설명
- 초기 누적값으로
{ sum: 0, count: 0 }객체를 설정합니다. - 각 순회마다 현재 객체의
age값을 합계에 더하고, 개수를 1씩 증가시킵니다. - 최종적으로 합계를 개수로 나누어 평균을 구합니다. 이때
(count || 1)을 사용하면 빈 배열이 들어올 경우 0으로 나누는 오류(NaN)를 방지할 수 있습니다.
출력 결과
23.4
위 예제에서 다섯 명의 나이는 각각 23, 21, 26, 28, 19세입니다. 이들의 합은 117이고, 117 ÷ 5 = 23.4이므로 평균 나이는 23.4세로 정상적으로 출력됩니다.