[JS] new Set 객체
2022. 2. 14. 19:23ㆍJavascript/개념
1. Set이란?
- Set 은 중복을 허용하지 않는 값을 모아놓은 컬렉션이다.
- 자바스크립트 표준 내장 객체 중 하나이다.
- set 객체는 자료형에 관계없이, 원시 값과 객체 참조 모두 유일한 값으로 저장할 수 있다.
- 즉, set 내의 모든 값을 유일한 값을 유지
const arr = [1, 1, 1, 2, 2, 2, 3, 3, 3];
console.log(new Set(arr)); // Set(3) { 1, 2, 3 }
console.log(...[1, 2, 3]); // 1 2 3
console.log(...new Set(arr)); // 1 2 3
console.log([...new Set(arr)]); // [ 1, 2, 3 ]
console.log(Array.from(new Set(arr))); // [ 1, 2, 3 ]
2. Set 생성자 함수
- Set 생성자 함수를 이용해 Set 객체를 생성한다.
- 인수를 생략하면 빈 Set 객체가 생성된다.
- 중복된 값은 Set 객체에 요소로 저장되지 않는다.
const set = new Set();
console.log(set); // Set(0) {}
const set1 = new Set([1, 2, 3, 3]);
console.log(set1); // Set(3) {1, 2, 3}
const set2 = new Set('hello');
console.log(set2); // Set(4) {"h", "e", "l", "o"}
3. Set 객체 메소드
// 값을 추가하고 Set 자신을 반환한다.
set.add(value)
// 값을 제거하고 성공하면 true, 아니면 false를 반환한다.
set.delete(value)
// Set 내에 값이 존재하면 true, 아니면 false를 반환한다.
set.has(value)
// Set을 비운다.
set.clear()
// Set에 몇 개의 값이 있는지 세어준다.
set.size
// Set 객체를 배열로 변환하는 방법은 Array.from(set)을 사용하면 된다.
const arr = new Set([1,2,2,3,4]);
console.log(Array.from(arr)); // [ 1, 2, 3, 4 ]
ex )
const set = new Set([1, 2, 3, 3]);
set.add(5);
console.log(set); // Set(4) { 1, 2, 3, 5 }
set.delete(3);
console.log(set); // Set(3) { 1, 2, 5 }
set.clear();
console.log(set); // Set(0) {}
console.log(set.size); // 0
4. 중복 값 제거
- 동일한 값을 허용하지 않는 Set의 특성을 활용해서 중복 값을 제거할 수 있다.
let set = new Set();
let kim = {name: 'Kim'};
let kyeong = {name: 'Kyeong'};
let min = {name: 'Min'};
set.add(kim);
set.add(kyeong);
set.add(min);
set.add(kim);
set.add(min);
console.log(set);
// Set(3) { { name: 'Kim' }, { name: 'Kyeong' }, { name: 'Min' } }
5. 요소 순회
- Set 객체는 반복자(iterator)이기 때문에 for...of 문 등을 통해 순회가 가능하다.
const set = new Set([1, 2, 3]);
for (const value of set) {
console.log(value); // 1 2 3
}
6. 집합 연산
- 교집합
Set.prototype.intersection = function(set){
const result = new Set();
for(const value of set){
// this는 생성자 함수가 생성한 인스턴스를 가리킨다.
if (this.has(value)) result.add(value);
}
return result;
};
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 4]);
// setA와 setB의 교집합
console.log(setA.intersection(setB)); // Set(2) {2, 4}
// setB와 setA의 교집합
console.log(setB.intersection(setA)); // Set(2) {2, 4}
교집합에서 new Set() this없을 때
result--- Set(0) {}
Set(2) { 2, 4 }
result--- Set(0) {}
Set(2) { 2, 4 }
교집합에서 new Set() this있을 때
result--- Set(4) { 1, 2, 3, 4 }
Set(4) { 1, 2, 3, 4 }
result--- Set(2) { 2, 4 }
Set(2) { 2, 4 }
- 합집합
Set.prototype.union = function(set){
// this(Set 객체)를 복사
const result = new Set(this);
console.log('result---', result);
for (const value of set) {
// 합집합은 2개의 Set 객체의 모든 요소로 구성된 집합이다. 중복된 요소는 포함되지 않는다.
result.add(value);
}
return result;
};
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 4]);
// setA와 setB의 합집합
console.log(setA.union(setB)); // Set(4) {1, 2, 3, 4}
// setB와 setA의 합집합
console.log(setB.union(setA)); // Set(4) {2, 4, 1, 3}
합집합에서 new Set() this없을 때
result--- Set(0) {}
Set(2) { 2, 4 }
result--- Set(0) {}
Set(4) { 1, 2, 3, 4 }
합집합에서 new Set() this있을 때
result--- Set(4) { 1, 2, 3, 4 }
Set(4) { 1, 2, 3, 4 }
result--- Set(2) { 2, 4 }
Set(4) { 2, 4, 1, 3 }
- 차집합
- 차집합 A-B는 집합 A에는 존재하지만 B에는 존재하지 않는 요소로 구성된다.
Set.prototype.difference = function (set) {
// this(Set 객체)를 복사
const result = new Set(this);
// 차집합 A-B는 집합 A에는 존재하지만 B에는 존재하지 않는 요소로 구성된다.
for (const value of set) {
result.delete(value);
}
return result;
};
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 4]);
// setA에 대한 setB의 차집합
console.log(setA.difference(setB)); // Set(2) {1, 3}
// setB에 대한 setA의 차집합
console.log(setB.difference(setA)); // Set(0) {}
차집합에서 new Set() this없을 때
result--- Set(0) {}
Set(0) {}
result--- Set(0) {}
Set(0) {}
차집합에서 new Set() this있을 때
result--- Set(4) { 1, 2, 3, 4 }
Set(2) { 1, 3 }
result--- Set(2) { 2, 4 }
Set(0) {}
7. 부분 집합과 상위 집합
- 집합 A가 집합 B에 포함되는 경우 집합 A는 B의 부분 집합이며 집합 B는 A의 상위 집합이다.
// this가 subset의 상위 집합인지 확인한다.
Set.prototype.isSuperset = function (subset) {
for (const value of subset) {
// superset의 모든 요소가 subset의 모든 요소를 포함하는지 확인
if (!this.has(value)) return false;
}
return true;
};
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 4]);
// setA가 setB의 상위 집합인지 확인한다.
console.log(setA.isSuperset(setB)); // true
// setB가 setA의 상위 집합인지 확인한다.
console.log(setB.isSuperset(setA)); // false
'Javascript > 개념' 카테고리의 다른 글
[JS] if-else if | if - if 차이점 (0) | 2022.02.28 |
---|---|
[JS] JSON.parse / JSON.stringify (0) | 2022.02.18 |
[JS] 조건문 if switch (0) | 2022.01.25 |
[JS] 전개 연산자 Spread Operator (0) | 2022.01.25 |
[JS] Math (0) | 2022.01.24 |