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

JavaScript forEach로 부분 합계(누적합) 배열 만드는 방법

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

const arr = [1, 1, 5, 2, -4, 6, 10];

우리가 작성해야 할 함수는 원본 배열과 크기가 같은 새로운 배열을 반환하되, 각 요소가 해당 위치까지의 모든 요소를 더한 누적 합계가 되도록 하는 것입니다.

따라서 기대하는 출력 결과는 다음과 같습니다.

const output = [1, 2, 7, 9, 5, 11, 21];

그럼 partialSum() 함수를 작성해 보겠습니다. 이 함수의 전체 코드는 아래와 같습니다.

예제

const arr = [1, 1, 5, 2, -4, 6, 10];
const partialSum = (arr) => {
    const output = [];
    arr.forEach((num, index) => {
       if(index === 0){
           output[index] = num;
       }else{
           output[index] = num + output[index - 1];
       }
    });
    return output;
};
console.log(partialSum(arr));

동작 원리

이 코드에서는 forEach 메서드를 사용해 배열의 각 요소를 순회합니다. 첫 번째 요소(index === 0)인 경우에는 그 값을 그대로 결과 배열에 저장하고, 그 이후의 요소부터는 현재 숫자와 바로 앞에 계산된 누적 합계(output[index - 1])를 더한 값을 결과 배열에 차례대로 할당합니다.

예를 들어 두 번째 요소 1은 앞의 1과 더해져 2가 되고, 세 번째 요소 5는 앞의 누적값 2와 더해져 7이 되는 식으로 진행됩니다.

출력 결과

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

[
    1, 2, 7, 9,
    5, 11, 21
]

참고로, 같은 기능은 reduce 메서드를 활용해서도 구현할 수 있지만, forEach를 사용하면 인덱스에 직접 접근할 수 있어 로직을 직관적으로 표현할 수 있다는 장점이 있습니다.