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;
  }