Set 객체
1. 중복되지 않는 유일한 값들의 집합을 말합니다.
2. Set 객체는 이터러블입니다. 따라서 for...of 문으로 순회가 가능하며 스프레드 문법과 배열 디스트럭처링의 대상이 될 수 있습니다.
3. Set 객체는 수학적 집합을 구현하기 위한 자료구조입니다. 따라서 Set 객체를 통해 교집합, 합집합, 차집합, 부분집합 등을 구현할 수 있습니다.
요소 개수 확인
Set.prototype.size
Set 객체에서 요소 개수를 확인할 때는 Set.prototype.size 프로퍼티를 사용합니다. size 프로퍼티는 setter 함수 없이 getter 함수만 존재하는 프로퍼티로 외부에서 수정이 불가능합니다.
요소 추가
Set.prototype.add
Set 객체에서 요소를 추가할 때는 Set.prototype.add 메서드를 사용합니다. add 메서드는 새로운 요소가 추가된 Set 객체를 반환하는데 add 메서드를 호출한 후에 add 메서드를 연속적으로 호출할 수 있습니다. 그리고 Map 객체와 동일하게 NaN과 NaN을 같다고 평가하여 중복 추가를 허용하지 않으며 객체와 배열과 같이 자바스크립트의 모든 값을 요소로 저장할 수 있습니다.
요소 존재 여부 확인
Set.prototype.has
has 메서드는 특정 요소의 존재 여부를 나타내는 불리언 값을 반환합니다. Set 객체에 특정 요소가 존재하는지 확인이 가능합니다. has 메서드를 사용해 다양한 집합 연산을 구현할 수 있습니다.
요소 삭제
Set.prototype.delete
Set.prototype.clear
delete 메서드는 인덱스가 아닌 삭제하려는 요소값을 인수로 전달해야 합니다. Set 객체는 배열과 같이 인덱스를 갖지 않기 때문입니다. 삭제 성공 여부를 불리언 값으로 반환하기 때문에 add 메서드와 달리 연속적으로 호출이 불가능합니다. Set 객체의 모든 요소를 일괄 삭제하려면 Set.prototype.clear 메서드를 사용합니다. clear 메서드는 언제나 undefined를 반환합니다.
집합 연산
교집합
교집합은 집합 A와 집합 B의 공통 요소로 구성됩니다.
Set.prototype.solution = function (el) {
return new Set([...this].filter((v) => el.has(v)));
};
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 4]);
console.log(setA.solution(setB)); // Set(2) {2, 4}
console.log(setB.solution(setA)); // Set(2) {2, 4}
합집합
합집합은 집합 A와 집합 B의 중복 없는 모든 요소로 구성됩니다.
Set.prototype.solution = function (el) {
return new Set([...this, ...el]);
};
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 4]);
console.log(setA.solution(setB)); // Set(4) { 1, 2, 3, 4 }
console.log(setB.solution(setA)); // Set(4) { 2, 4, 1, 3 }
차집합
차집합 A-B는 집합 A에는 존재하지만 집합 B에는 존재하지 않는 요소로 구성됩니다.
Set.prototype.solution = function (el) {
return new Set([...this].filter((v) => !el.has(v)));
};
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 4]);
console.log(setA.solution(setB)); // Set(2) { 1, 3 }
console.log(setB.solution(setA)); // Set(0) {}
부분집합
집합 A가 집합 B에 포함되는 경우 집합 A는 집합 B의 부분 집합이며, 집합 B는 집합 A의 상위 집합입니다.
Set.prototype.solution = function (el) {
const setArr = [...this];
return [...el].every((v) => setArr.includes(v));
};
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 4]);
console.log(setA.solution(setB)); // true
console.log(setB.solution(setA)); // false
참고
- 모던 자바스크립트 Deep Dive
'Language > JavaScript' 카테고리의 다른 글
[JS] Map 객체 (0) | 2021.08.18 |
---|---|
[JS] 타입 변환 (0) | 2021.08.11 |
[JS] Window, DOM, BOM (0) | 2021.07.08 |
[JS] 호이스팅이란? (0) | 2021.07.07 |
[JS] Promise란? (0) | 2021.07.02 |
댓글