Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript – 조건에 맞는 값만 골라 평균 계산하기 (null 값 제외)

JavaScript에서 배열 데이터의 평균을 구할 때, 유효하지 않은 값(null)은 제외해야 하는 경우가 자주 있습니다. 예를 들어 다음과 같이 객체로 이루어진 배열이 있다고 가정해 보겠습니다.

data = [
    {"Age":26,"Level":8},
    {"Age":37,"Level":9},
    {"Age":32,"Level":5},
    {"Age":31,"Level":11},
    {"Age":null,"Level":15},
    {"Age":null,"Level":17},
    {"Age":null,"Level":45}
];

여기서 요구 사항은 Age 속성에 유효한(truthy) 값이 있는 객체들만 대상으로 Level의 평균을 계산하는 JavaScript 함수를 작성하는 것입니다. Age가 null인 객체는 평균 계산에서 완전히 제외되어야 합니다.

구현 방법

이 문제는 reduce() 메서드를 활용하면 깔끔하게 해결할 수 있습니다. reduce를 사용해 유효한 데이터의 개수(count)와 레벨의 합계(sum)를 동시에 누적한 뒤, 마지막에 합계를 개수로 나누면 됩니다.

예제 코드

data = [
    {"Age":26,"Level":8},
    {"Age":37,"Level":9},
    {"Age":32,"Level":5},
    {"Age":31,"Level":11},
    {"Age":null,"Level":15},
    {"Age":null,"Level":17},
    {"Age":null,"Level":45}
];
const findAverage = arr => {
    const creds = arr.reduce((acc, val) => {
        const { Age, Level } = val;
        let { count, sum } = acc;
        if(Age){
            count += 1;
            sum += Level;
        };
        return { count, sum };
    }, {
        count: 0,
        sum: 0
    });
    return (creds.sum)/(creds.count);
};
console.log(findAverage(data));

코드 설명

  • reduce()의 초기값으로 { count: 0, sum: 0 }을 설정하여 누적 계산의 기준점을 만듭니다.
  • 각 객체를 순회하면서 if(Age) 조건문으로 Age 값이 null이 아닌 경우(유효한 값인 경우)에만 count와 sum을 증가시킵니다.
  • 최종적으로 sum / count를 반환하여 유효한 데이터만 반영한 평균값을 얻습니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

8.25

Age가 null인 세 개의 객체(Level: 15, 17, 45)는 계산에서 제외되었기 때문에, 유효한 네 개의 객체(Level: 8, 9, 5, 11)만으로 평균을 구한 결과인 8.25가 출력됩니다. 만약 null 값을 제외하지 않고 전체 합계를 7로 나누었다면 완전히 다른 결과가 나왔을 것이므로, 실무에서 데이터 집계 시 이러한 필터링 처리는 매우 중요합니다.