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

JavaScript 배열에서 중복된 요소 합산하기 – 동일한 값을 하나로 합치는 방법

숫자로 이루어진 배열을 입력받아 처리하는 JavaScript 함수를 작성해야 한다고 가정해 보겠습니다.

배열 안에는 같은 값이 여러 번 반복해서 들어 있을 수 있습니다. 이때 함수는 중복된 요소들을 각각 한데 묶어 합산하고, 그 결과로 만들어진 새로운 배열을 반환해야 합니다.

예제 코드

작성할 코드는 다음과 같습니다.

const arr = [20, 20, 20, 10, 10, 5, 1];
const sumIdentical = (arr = []) => {
    let map = {};
    for (let i = 0; i < arr.length; i++) {
        let el = arr[i];
        map[el] = map[el] ? map[el] + 1 : 1;
    };
    const res = [];
    for (let count in map) {
        res.push(map[count] * count);
    };
    return res;
};
console.log(sumIdentical(arr));

출력 결과

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

[ 1, 5, 20, 60 ]

코드 동작 원리

이 코드의 핵심 로직은 크게 두 단계로 나눌 수 있습니다.

1단계: 등장 횟수 세기 — 첫 번째 반복문에서는 일반 객체(map)를 해시 맵처럼 활용합니다. 배열을 순회하면서 각 숫자가 몇 번 나타나는지 기록하고, 이미 존재하는 키라면 개수를 1씩 증가시킵니다.

2단계: 합계 계산하기 — 두 번째 반복문에서는 객체의 각 키, 즉 고유한 숫자 값을 순회하면서 해당 값에 등장 횟수를 곱합니다. 예를 들어 20은 세 번 등장했으므로 20 × 3 = 60이 되어 결과 배열에 추가됩니다.

참고로 자바스크립트 객체의 정수 형태 키는 오름차순으로 자동 정렬되어 순회되기 때문에, 최종 결과 배열도 [1, 5, 20, 60]처럼 값이 작은 순서부터 정렬되어 출력됩니다.