Set
Set 객체는 값 콜렉션(Collections)으로 삽입된 순서대로 요소들을 반복(iterate) 할 수 있습니다.
영상 강의
PART 1
예제
배열 객체와 달리 Set 객체는 아이템 중복을 허용하지 않습니다.
// 배열(Array)
const features = ['modules','arrow function','let, const','rest parameter','modules'];
console.log(features.length, features[0]); // 5, 'modules'
// 세트(Set) : new Set([iterable]);
const features_set = new Set(features);
console.log(features_set.size, features_set[0]); // 4, undefined
Set 객체는 아이템 개수를 반환하는 속성과 추가, 소유 확인, 제거, 모두 제거를 처리하는 메서드를 제공합니다.
.size
.add()
.has()
.delete()
.clear()
// Set 객체 생성
const set = new Set([3, 9]);
// 아이템 추가
set.add(10);
// 아이템 개수 출력
console.log(set.size); // 3
// 아이템 제거
set.delete(9);
console.log(set.size); // 2
// 아이템 소유 확인
console.log(set.has(9)); // false
// 아이템 모두 제거
set.clear();
console.log(set.size); // 0
뿐만 아니라 Set 객체를 순환하는 메서드도 제공합니다.
.forEach()
.entries()
.values()
.keys()
const oneTwoThree = new Set(['하나', '둘', '둘', '셋']);
oneTwoThree.forEach(n => console.log(n)); // '하나', '둘', '셋'
for (let item of oneTwoThree.entries()) {
console.log(item);
// ['하나', '하나']
// ['둘', '둘']
// ['셋', '셋']
}
for (let key of oneTwoThree.keys()) {
console.log(key);
// '하나'
// '둘'
// '셋'
}
for (let value of oneTwoThree.values()) {
console.log(value);
// '하나'
// '둘'
// '셋'
}
Set 확장 클래스
Set 클래스를 확장하는 사용자 정의 클래스 y9Set을 정의한 후, 합집합, 교집합, 차집합, 부분집합을 처리하는 메서드를 정의할 수 있습니다.
class y9Set extends Set {
// 합집합
union(x){ return new Set([...this, ...x]) }
// 교집합
intersect(x){return new Set([...this].filter(y => x.has(y)))}
// 차집합
diff(x){return new Set([...this].filter(y => !x.has(y)))}
// 상위 집합 유무 확인
isSuperset(x){
for (let y of x) {
if (!this.has(y)) { return false; }
}
return true;
}