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

JavaScript로 배열의 연속 요소 평균 계산하기

다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.

const arr = [3, 5, 7, 8, 3, 5, 7, 4, 2, 8, 4, 2, 1];

여기서 우리는 각 요소와 바로 앞에 있는 요소(선행 요소)의 평균을 담은 새로운 배열을 반환하는 함수를 작성해야 합니다. 단, 첫 번째 요소는 앞에 다른 요소가 존재하지 않기 때문에 해당 요소 자체를 그대로 반환하면 됩니다.

이 문제는 Array.prototype.map() 메서드를 활용하면 간결하게 해결할 수 있습니다. 코드를 작성해 보겠습니다.

예제

const consecutiveAverage = arr => {
    return arr.map((el, ind, array) => {
        return ((el + (array[ind-1] || 0)) / (1 + !!ind));
    });
};
console.log(consecutiveAverage(arr));

코드 동작 원리

위 코드의 핵심 로직은 다음 두 부분으로 나눌 수 있습니다.

  • array[ind-1] || 0 : 현재 요소의 이전 값을 가져옵니다. 첫 번째 요소의 경우 인덱스가 0이므로 array[-1]undefined가 되고, OR 연산자(||)에 의해 0으로 대체됩니다.
  • 1 + !!ind : 나눗셈의 분모 역할을 합니다. 인덱스가 0이면 !!indfalse(즉, 0)가 되어 분모가 1이 되고, 그 외의 경우에는 true(즉, 1)가 되어 분모가 2가 됩니다. 덕분에 첫 번째 요소는 자기 자신만으로, 나머지 요소는 이전 요소와 함께 평균이 계산됩니다.

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

[
    3, 4, 6, 7.5, 5.5, 4,
    6, 5.5, 3, 5, 6, 3,
    1.5
]

결과를 살펴보면 첫 번째 값은 3(첫 요소 그대로), 두 번째 값은 (5+3)/2 = 4, 세 번째 값은 (7+5)/2 = 6처럼 각 요소와 이전 요소의 평균이 순서대로 계산된 것을 확인할 수 있습니다.