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

JavaScript 객체 배열에서 중복 제거하기: Set을 활용한 가장 효율적인 방법

실무에서 API 응답 데이터나 사용자 정보를 처리하다 보면 객체 배열 안에 동일한 값이 여러 번 포함되는 경우가 자주 발생합니다. 이번 글에서는 JavaScript의 Set 자료구조를 활용해 객체 배열에서 중복을 깔끔하게 제거하는 방법을 소개합니다.

중복이 포함된 샘플 데이터

다음과 같이 studentId 값에 중복(104, 106)이 존재하는 학생 객체 배열이 있다고 가정해 보겠습니다.

var studentDetails = [
    { studentId: 101 },
    { studentId: 104 },
    { studentId: 106 },
    { studentId: 104 },
    { studentId: 110 },
    { studentId: 106 },
]

Set을 활용한 중복 제거 방법

Set은 고유한 값(unique value)만 저장하는 자료구조입니다. 이 특성을 이용하면 특정 속성값이 이미 등장했는지 손쉽게 확인할 수 있습니다. has() 메서드로 중복 여부를 검사하고, 처음 등장하는 객체만 새로운 배열에 추가하면 됩니다.

예제 코드

var studentDetails = [
    { studentId: 101 },
    { studentId: 104 },
    { studentId: 106 },
    { studentId: 104 },
    { studentId: 110 },
    { studentId: 106 },
]

const distinctValues = new Set()
const withoutDuplicate = []

for (const tempObj of studentDetails) {
    if (!distinctValues.has(tempObj.studentId)) {
        distinctValues.add(tempObj.studentId)
        withoutDuplicate.push(tempObj)
    }
}

console.log(withoutDuplicate)

프로그램 실행 방법

위 프로그램을 실행하려면 Node.js 환경에서 다음 명령어를 입력합니다.

node fileName.js

실행 결과

파일 이름이 demo158.js라면 터미널에서 다음과 같은 출력 결과를 확인할 수 있습니다.

PS C:\Users\Amit\JavaScript-code> node demo158.js
[
    { studentId: 101 },
    { studentId: 104 },
    { studentId: 106 },
    { studentId: 110 }
]

동작 원리 정리

이 방식의 핵심은 다음과 같습니다.

  • Set 생성: 이미 확인한 studentId 값을 저장하는 용도로 사용됩니다.
  • has() 검사: 현재 객체의 studentId가 Set에 없는 경우에만 처리를 진행합니다.
  • add() + push(): 해당 ID를 Set에 추가하고, 원본 객체를 결과 배열에 저장합니다.

Set의 조회 성능은 평균적으로 O(1)이므로, 배열 전체를 반복하며 매번 find()filter()로 중복을 검사하는 방식(O(n²))보다 훨씬 빠릅니다. 따라서 대량의 데이터를 다룰 때도 안정적인 성능을 기대할 수 있으며, 객체 배열의 중복 제거에 가장 널리 권장되는 패턴 중 하나입니다.