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

JavaScript에서 두 배열을 병합하고 중복 요소 제거하기

문제 소개

두 개의 숫자 배열 arr1arr2를 각각 첫 번째, 두 번째 인수로 받아 처리하는 JavaScript 함수를 작성해야 합니다.

이 함수의 역할은 두 배열의 요소를 하나의 새로운 배열로 병합하는 것입니다. 이때 병합 전이나 병합 과정에서 중복된 값이 발견되면 나머지 중복 항목은 모두 제거하여, 각 요소가 최종 배열에 정확히 한 번만 존재하도록 만들어야 합니다.

요소들의 순서는 크게 중요하지 않지만, 모든 요소의 등장 빈도가 반드시 1이 되어야 한다는 점이 핵심입니다.

예를 들어, 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.

const arr1 = [6, 5, 2, 1, 8];
const arr2 = [3, 4, 6, 8, 9];

두 배열에는 6과 8이 공통으로 포함되어 있으므로, 기대하는 출력 결과는 다음과 같습니다.

const output = [6, 5, 2, 1, 8, 3, 4, 9];

예제 코드

다음은 위 문제를 해결하는 코드입니다.

const arr1 = [6, 5, 2, 1, 8];
const arr2 = [3, 4, 6, 8, 9];

const mergeAndRectify = (arr1 = [], arr2 = []) => {
    const res = [];
    for (const num of [...arr1, ...arr2]) {
        if (!res.includes(num)) {
            res.push(num);
        }
    }
    return res;
};

console.log(mergeAndRectify(arr1, arr2));

코드 설명

  • 전개 연산자(...)를 사용해 두 배열을 하나의 배열로 합칩니다.
  • 결과 배열 res에 아직 존재하지 않는 값일 때만 push()하여 중복 추가를 방지합니다.
  • includes() 메서드는 배열에 특정 값이 이미 들어 있는지 확인하는 데 사용됩니다.

출력 결과

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

[ 6, 5, 2, 1, 8, 3, 4, 9 ]

더 간단한 방법: Set 활용하기

ES6에서 도입된 Set 객체를 사용하면 중복 제거 로직을 훨씬 더 간결하게 작성할 수 있습니다.

const mergeAndRectify = (arr1 = [], arr2 = []) => [...new Set([...arr1, ...arr2])];

console.log(mergeAndRectify([6, 5, 2, 1, 8], [3, 4, 6, 8, 9]));
// [ 6, 5, 2, 1, 8, 3, 4, 9 ]

Set은 중복 값을 허용하지 않는 자료구조이므로, 병합된 배열을 Set으로 변환한 뒤 다시 배열로 펼치기만 하면 됩니다. 배열이 클수록 includes()를 반복 호출하는 방식(O(n²))보다 Set 기반 접근(O(n))이 성능 면에서 훨씬 유리합니다.