Set과 Map

seongkyun·2020년 12월 7일
0

TIL - Javascript

목록 보기
27/28

기존 블로그에 작성한 내용을 velog로 이전한 글입니다


1. Set과 Map이란

  • Set 객체: 중복되지 않는 유일한 값들의 집합

  • Map 객체: 중복되지 않는 키, 중복 가능한 값의 쌍으로 이루어진 컬렉션


2. Set과 Map 비교

| 기능 | Set | Map |
| :-----------: | :-------------------: | :----------------------: |
| 순서 의미 | X | X |
| 생성 | new Set(); | new Map(); |
| 개수 확인 | Set#size() | Map#size() |
| 요소 추가 | Set#add() (중복허용X) | Map#add() (키 중복허용X) |
| 요소 확인 | Set#has() | Map#has() |
| 요소 삭제 | Set#delete() | Map#delete() |
| 요소 전체삭제 | Set#clear() | Map#clear() |
| 요소 순회 | Set#forEach() | Map#forEach() |



3. Set과 수학적 집합

3.1 교집합

다음과 같이 교집합을 구할 수 있다.

// Set 객체 받아 교집합 구하기
const getIntersection = function (set1, set2) {
  let result = new Set();

  for (const value of set1) {
    if (set2.has(value)) result.add(value);
  }

  return result;
};

// 배열과 Set 객체 받아 교집합 구해서 배열로 내보내기
const getAllTypeIntersection = function (iter1, iter2) {
  iter1 = new Set([...iter1]);
  iter2 = new Set([...iter2]);

  let result = new Set();

  for (const value of iter1) {
    if (iter2.has(value)) result.add(value);
  }

  return [...result];
};

const set1 = new Set([1, 2, 3, 4, 5]);
const set2 = new Set([3, 4, 5, 6, 7]);

console.log(getIntersection(set1, set2)); // Set { 3, 4, 5 }
console.log(getAllTypeIntersection(set1, set2)); // [ 3, 4, 5 ]

3.2 합집합

다음과 같이 합집합을 구현할 수 있다.

// Set 객체 받아 합집합 구하기
const getUnion = function (set1, set2) {
  let result = new Set(set1);

  for (const value of set2) {
    result.add(value);
  }

  return result;
};

// 배열과 Set 객체 받아 합집합 구해서 배열로 내보내기
const getAllTypeUnion = function (iter1, iter2) {
  iter1 = new Set([...iter1]);
  iter2 = new Set([...iter2]);

  let result = new Set(iter1);

  for (const value of iter2) {
    result.add(value);
  }

  return [...result];
};

const set1 = new Set([1, 2, 3, 4, 5]);
const set2 = new Set([3, 4, 5, 6, 7]);

console.log(getUnion(set1, set2)); // Set { 1, 2, 3, 4, 5, 6, 7 }
console.log(getAllTypeUnion(set1, set2)); // [ 1, 2, 3, 4, 5, 6, 7 ]

3.3 차집합

차집합(A-B)은 집합 A에는 존재하지만 집합 B에는 존재하지 않는 요소들의 집합이다.

// Set 객체 받아 차집합 구하기
const getDifference = function (set1, set2) {
  let result = new Set(set1);

  for (const value of set2) {
    result.delete(value);
  }

  return result;
};

// 배열과 Set 객체 받아 차집합 구해서 배열로 내보내기
const getAllDifference = function (iter1, iter2) {
  iter1 = new Set([...iter1]);
  iter2 = new Set([...iter2]);

  let result = new Set(iter1);

  for (const value of iter2) {
    result.delete(value);
  }

  return [...result];
};

const set1 = new Set([1, 2, 3, 4, 5]);
const set2 = new Set([3, 4, 5, 6, 7]);

console.log(getDifference(set1, set2)); // Set { 1, 2 }
console.log(getAllDifference(set1, set2)); // [ 1, 2 ]

3.4 부분 집합과 상위 집합

집합 A가 집합 B에 포함되는 경우(A⊆B), 집합 A는 집합 B의 부분 집합이며 집합 B는 집합 A의 상위 집합이다.

// Set 객체 받아 상위집합 여부 구하기
const getIsSuperset = function (set1, set2) {
  for (const value of set2) {
    if (!set1.has(value)) return false;
  }

  return true;
};

// 배열과 Set 객체 받아 상위집합 여부 구하기
const getAllIsSuperset = function (iter1, iter2) {
  iter1 = new Set([...iter1]);
  iter2 = new Set([...iter2]);

  for (const value of iter2) {
    if (!iter1.has(value)) return false;
  }

  return true;
};

console.log(getIsSuperset(set1, set2)); // false
console.log(getAllIsSuperset(set1, set2)); // false

참고자료: poiemaweb.com

profile
FrontEnd Developer

0개의 댓글