🎯 맵

Map은 키가 있는 데이터를 저장한다는 점에서 객체와 매우 유사하다. 다만, 객체와 다른 점은 키에 다양한 자료형을 허용한다는 점에서 차이가 있다.

맵에는 다음과 같은 주요 메서드와 프로퍼티가 있다.

  • new Map() : 맵을 생성한다.
  • map.set(key, value) : key를 이용해 value를 저장한다.
  • map.get(key) : key에 해당하는 값을 반환한다. key가 존재하지 않으면 undefined를 반환한다.
  • map.has(key) : key가 존재하면 true, 존재하지 않으면 false를 반환한다.
  • map.delete(key) : key에 해당하는 값을 삭제한다.
  • map.clear() : 맵 안의 모든 요소를 제거한다.
  • map.size() : 요소의 개수를 반환한다.

주의해야할 점은 map[key]는 Map을 사용하는 올바른 방법이 아니다. 이 방법은 map을 일반 객체처럼 취급하게 된다. 따라서 여러 제약이 생기게 된다. map을 사용할 땐 map 전용 메서드 set, get 등을 사용해야만 한다.

💎 맵의 요소에 반복 작업하기

  • map.keys() : 각 요소의 키를 모은 반복 가능한 객체를 반환한다.
  • map.values() : 각 요소의 값을 모은 이터러블 객체를 반환한다.
  • map.entries() : 요소의 [키, 값] 을 한 쌍으로 하는 이터러블 객체를 반환한다. 이 이터러블 객체는 for…of 반복문의 기초로 쓰인다.

맵은 값이 삽입된 순서대로 순회를 실시한다. 객체가 프로퍼티 순서를 기억하지 못하는 것과는 다르다.

💎 Object.fromEntries: 맵을 객체로 바꾸기

Object.fromEntries를 사용하면 맵을 객체로 바꿀 수 있다.

let obj = Object.fromEntries(map.entries());

🎯 셋

Set은 중복을 허용하지 않는 값을 모아놓은 특별한 컬렉션이다. 셋에 키가 없는 값이 저장된다.

  • new Set(iterable) : 셋을 만든다. 이터러블 객체를 전달받으면 그 안의 값을 복사해 셋에 넣어준다.
  • set.add(value) : 값을 추가하고 셋 자신을 반환한다.
  • set.delete(value) : 값을 제거한다. 호출 시점 내에 값이 있어서 제거에 성공하면 true를, 아니면 false를 반환한다.
  • set.has(value) : 셋 내에 값이 존재하면 true, 아니면 false를 반환한다.
  • set.cleat() : 셋을 비운다.
  • set.size() : 셋에 몇 개의 값이 있는지 세준다.