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

참고