Set은 흔히 집합이라고도 합니다. Set(집합)의 개념은 간단합니다. 유한하고 구분되는 객체들의 그룹입니다. 즉, 유일한(중복되지 않는) 항목들의 그룹입니다. 집합은 O(1) 상수 시간에 유일한 항목을 확인하고 추가할 수 있기 때문에 굉장히 중요합니다. 집합이 상수 시간 연산이 가능한 이유는 집합의 구현이 해시 테이블의 구현을 기초로 하기 때문입니다.
다음과 같이 자바스크립트에서는 Set이 기본으로 지원됩니다. 기본 Set 객체에는 속성이 하나만 존재하는 데 size라는 정수 속성입니다. 해당 속성은 집합 내 항목들의 현재 개수를 나타냅니다.
const exampleSet = new Set();
[삽입]
Set의 주요 특징은 유일함을 확인한다는 것입니다. Set은 항목들을 추가할 수 있지만 중복되는 항목은 허용되지 않습니다. 아래의 코드는 Set에는 중복 항목들을 추가할 수 없다는 것을 확인할 수 있습니다.
const exampleSet = new Set();
exampleSet.add(1); // exampleSet: Set {1}
exampleSet.add(1); // exampleSet: Set {1}
exampleSet.add(2); // exampleSet: Set {1, 2}
[삭제]
Set은 집합으로부터 항목들을 삭제할 수도 있습니다. Set.delete는 boolean을 반환합니다. (해당 항목이 존재해서 삭제됐다면 true, 해당 항목이 존재하지 않으면 fasle)
const examplSet = new Set();
exampleSet.add(1); // exampleSet: Set {1}
exampleSet.delete(1); // true
exampleSet.delete(5); // false
exampleSet.add(2); // exampleSet: Set {2}
[포함]
Set.has는 해당 항목이 집합 내에 존재하는지 확인합니다. 확인하는 데 걸리는 시간은 O(1)밖에 되지 않습니다.
const exampleSet = new Set();
exampleSet.add(1); // exampleSet: Set {1}
exampleSet.has(1); // true
exampleSet.has(2); // false
exampleSet.add(2); // exampleSet: Set {1, 2}
exampleSet.has(2); // true
[예제]
1. Set을 사용해 배열의 중복 항목 확인하는 예제입니다.
배열을 집합(Set)으로 변환함으로써 집합의 크기를 배열의 길이와 비교해 중복이 있는지 쉽게 확인할 수 있습니다.
function checkDuplicate(arr) {
const mySet = new Set(arr);
return mySet.size < arr.length;
}
checkDuplicate([1,2,3,4,5]); // false
checkDuplicate([1,1,2,3,4,5]); // true
2. 개별적인 배열들로부터 유일한 값만을 반환하는 예제입니다.
두 배열을 합친 다음 해당 두 배열을 집합(Set)으로 변환함으로써 유일한 항목들만을 저장합니다. 그러고 나서 해당 집합을 다시 배열로 변환하면 결과적으로 유일한 항목들만을 지닌 배열이 생성됩니다.
function uniqueList(arr1, arr2) {
const mySet = new Set(arr1.concat(arr2));
return Array.from(mySet);
}
References
https://ko.wikipedia.org/wiki/%EC%A7%91%ED%95%A9
자바스크립트로하는 자료구조와 알고리즘(배세민)
'1. 웹개발 > 1_1_1 JavaScript' 카테고리의 다른 글
[Javascript] BOM이란? (0) | 2022.06.25 |
---|---|
[Javascript] Mobile인지 PC인지 확인하는 함수 (2) | 2022.05.12 |
[Javascript] 빅오 표기법 정리 및 예제 (2) | 2022.04.28 |
[Javascript] 시간 복잡도 정리 및 예제 (0) | 2022.04.27 |
[Javascript] push() 대신 펼침 연산자로 원본 변경을 피하는 방법 (0) | 2022.04.21 |