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

JavaScript 배열에서 각 요소와 이전 요소의 평균값 계산하기

숫자로 이루어진 배열이 주어졌을 때, 각 요소와 바로 앞의 요소(선행 요소)의 평균값을 담은 새로운 배열을 반환하는 함수를 작성해야 합니다.

첫 번째 요소는 이전에 비교할 요소가 존재하지 않기 때문에, 해당 요소 자신이 그대로 결과에 포함됩니다.

이러한 문제는 Array.prototype.map() 메서드를 활용하면 매우 간결하게 해결할 수 있습니다. map()은 원본 배열을 변경하지 않으면서 각 요소를 변환한 새로운 배열을 만들어 주기 때문에, 이런 유형의 변환 작업에 적합합니다.

구현 예제

해당 기능을 구현한 코드는 다음과 같습니다.

const arr = [3, 5, 7, 8, 3, 5, 7, 4, 2, 8, 4, 2, 1];
const consecutiveAverage = arr => {
    return arr.map((el, ind, array) => {
        const first = (array[ind-1] || 0);
        const second = (1 + !!ind);
        return ((el + first) / second);
    });
};
console.log(consecutiveAverage(arr));

코드 동작 원리

이 코드의 핵심 로직을 살펴보면 다음과 같습니다.

첫째, array[ind-1] || 0 부분은 현재 인덱스가 0일 때 array[-1]undefined가 되므로, 이 경우 0으로 대체하여 오류 없이 처리합니다.

둘째, 1 + !!ind는 나눗셈의 분모 역할을 합니다. 첫 번째 요소(인덱스 0)에서는 !!ind가 false 즉 0이 되어 분모가 1이 되고, 그 외의 경우에는 2가 되어 두 요소의 평균을 구하게 됩니다.

실행 결과

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

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

출력 결과를 보면 첫 번째 값은 원래 배열의 첫 요소인 3이 그대로 유지되고, 두 번째 값부터는 (현재 요소 + 이전 요소) ÷ 2로 계산된 평균값이 순서대로 들어가 있는 것을 확인할 수 있습니다.