[K.O Javascript] 맵(Map)과 셋(Set)

진형욱·2022년 8월 16일
0

TIL - JavaScript

목록 보기
6/6
post-thumbnail

맵(Map)과 셋(Set)

Map

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

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 – 요소의 개수를 반환.

let map = new Map();

map.set('1', 'str1');   // 문자형 키
map.set(1, 'num1');     // 숫자형 키
map.set(true, 'bool1'); // 불린형 키

alert( map.get(1)   ); // 'num1'
alert( map.get('1') ); // 'str1'

alert( map.size ); // 3

객체는 키를 문자형으로 변환하지만, 맵은 키의 타입을 변환시키지 않고 그대로 유지한다.

let john = { name: "John" };

// 고객의 가게 방문 횟수를 세본다고 가정해 봅시다.
let visitsCountMap = new Map();

// john을 맵의 키로 사용하겠습니다.
visitsCountMap.set(john, 123);

alert( visitsCountMap.get(john) ); // 123

객체로 사용할 수 있는 점은 의 중요한 기능 중 하나다.
객체에는 문자열 키를 사용할 수 있다. 하지만 객체 키는 사용할 수 없다.


셋(Set)

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

Set 주요 메서드

  • new Set(iterable) – 셋을 만들고, 이터러블 객체를 전달받으면(대개 배열을 전달받음) 그 안의 값을 복사해 셋에 넣어준다.

  • set.add(value) – 값을 추가하고 셋 자신을 반환.

  • set.delete(value) – 값을 제거. 호출 시점에 셋 내에 값이 있어서 제거에 성공하면 true, 아니면 false를 반환.

  • set.has(value) – 셋 내에 값이 존재하면 true, 아니면 false를 반환.

  • set.clear() – 셋을 비운다.

  • set.size – 셋에 몇 개의 값이 있는지 세준다.

셋 내에 동일한 값(value)이 있다면 set.add(value)을 아무리 많이 호출하더라도 아무런 반응이 없을것이다. 셋 내의 값에 중복이 없는 이유가 바로 이 때문이다.
한 방문자가 여러번 방문해도 방문자를 중복해서 기록하지 않겠다고 하는 상황과 유사하다.
즉 한 방문자는 '단 한번만 기록'이 되어야 한다.

에도 과 마찬가지로 반복 작업을 위한 메서드가 있습니다.

  • set.keys() – 셋 내의 모든 값을 포함하는 이터러블 객체를 반환.
  • set.values() – set.keys와 동일한 작업 을 합니다. 맵과의 호환성을 위해 만들어진 메서드.
  • set.entries() – 셋 내의 각 값을 이용해 만든 [value, value] 배열을 포함하는 이터러블 객체를 반환한다. 맵과의 호환성을 위해 만들어짐.

요약

은 키가 있는 값이 저장된 컬렉션입니다.

주요 메서드와 프로퍼티:

  • new Map([iterable]) – 맵을 만든다.

    • [key,value] 쌍이 있는 iterable(예: 배열) 을 선택적으로 넘길 수 있는데,
      이때 넘긴 이터러블 객체는 맵 초기화에 사용.
  • map.set(key, value)를 이용해 값을 저장.

  • map.get(key)에 해당하는 값을 반환합니다. key가 존재하지 않으면 undefined를 반환.

  • map.has(key)가 있으면 true, 없으면 false를 반환.

  • map.delete(key)에 해당하는 값을 삭제.

  • map.clear() – 맵 안의 모든 요소를 제거.

  • map.size요소의 개수를 반환.

일반적인 객체와의 차이점:

  1. 키의 타입에 제약이 없다.

  2. 객체도 키가 될 수 있다.

  3. size 프로퍼티 등의 유용한 메서드나 프로퍼티가 있다.

  4. 중복이 없는 값을 저장할 때 쓰이는 컬렉션.

주요 메서드와 프로퍼티:

  • new Set([iterable])셋(set)을 만든다.

    • iterable 객체를 선택적으로 전달받을 수 있는데(대개 배열을 전달받음), 이터러블 객체 안의 요소는 셋을 초기화하는데 쓰인다.
  • set.add(value) – 값을 추가하고 자신을 반환.
    셋 내에 이미 value가 있는 경우 아무런 작업을 하지 않는다.

  • set.delete(value)값을 제거.

    • 호출 시점에 셋 내에 값이 있어서 제거에 성공 하면 true, 아니면 false를 반환.
  • set.has(value) – 셋 내에 값이 존재하면 true, 아니면 false를 반환.

  • set.clear() – 셋을 비운다.

  • set.size – 셋에 몇 개의 값이 있는지 세줍니다.

    • 맵과 셋에 반복 작업을 할 땐, 해당 컬렉션에 요소나 값을 추가한 순서대로 반복 작업이 수행된다.

따라서 이 두 컬렉션(Map, Set)은 정렬이 되어있지 않다고 할 수 없다.
그렇지만 컬렉션 내 요소나 값을 재 정렬하거나 (배열에서 인덱스를 이용해 요소를 가져오는 것처럼) 숫자를 이용해 특정 요소나 값을 가지고 오는 것불가능하다.

profile
90% of my problems magically disappeared when I slept well, ate well and went on regular walks

0개의 댓글