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

자바스크립트로 배열의 최솟값·최댓값을 제외한 평균 계산하기


이번 글에서는 숫자로 이루어진 배열을 인자로 받아, 가장 작은 값과 가장 큰 값을 제외한 나머지 요소들의 평균을 반환하는 자바스크립트 함수를 작성해 보겠습니다.

접근 방법

배열을 여러 번 순회하는 대신 reduce() 메서드를 활용하면 단 한 번의 순회로 다음 세 가지 값을 동시에 계산할 수 있습니다.

  • sum: 배열 요소들의 총합
  • max: 배열 내 최댓값
  • min: 배열 내 최솟값

순회가 끝난 뒤 총합에서 최댓값과 최솟값을 차례로 빼고, 그 결과를 (배열 길이 − 2)로 나누면 원하는 평균을 얻을 수 있습니다.

예제 코드

const arr = [5, 3, 5, 6, 12, 5, 65, 3, 2];

const findExcludedAverage = arr => {
  const creds = arr.reduce((acc, val) => {
    let { min, max, sum } = acc;
    sum += val;
    if (val > max) {
      max = val;
    }
    if (val < min) {
      min = val;
    }
    return { min, max, sum };
  }, {
    min: Infinity,
    max: -Infinity,
    sum: 0
  });
  const { max, min, sum } = creds;
  return (sum - min - max) / (arr.length - 2);
};

console.log(findExcludedAverage(arr));

코드 설명

  • 초기 누적 객체를 { min: Infinity, max: -Infinity, sum: 0 }으로 설정하면, 어떤 값과 비교해도 첫 번째 요소가 곧바로 최댓값·최솟값으로 갱신됩니다.
  • 순회 중에는 각 요소를 sum에 더하고, 현재 값이 기존 최댓값보다 크거나 최솟값보다 작으면 해당 값을 갱신합니다.
  • 마지막에는 (sum - min - max)로 극단값 두 개를 제외한 합계를 구한 후, 남은 요소 개수인 (arr.length - 2)로 나누어 평균을 반환합니다.

출력 결과

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

5.571428571428571