Posts 모던 자바스크립트 #5.7. 맵과 셋
Post
Cancel

모던 자바스크립트 #5.7. 맵과 셋

모던 JavaScript 튜토리얼을 따라가면서 정리합니다.

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

주요 메서드와 프로퍼티

  • new Map([iterable]): 맵을 만든다. [key, value] 쌍이 있는 iterable(예: 배열)을 선택적으로 넘길 수 있는데, 이때 넘긴 이터러블 객체는 맵 초기화에 사용된다.

  • map.set(key, value): 키를 이용해 값을 저장한다.

    set을 호출할 때마다 맵 자신이 반환되기 때문에 map.set을 체이닝할 수 있다.

    1
    2
    3
    
    map.set('1', 'str1')
      .set(1, 'num1')
      .set(true, 'bool1');
    
  • map.get(key): 키에 해당하는 값을 반환한다. key가 존재하지 않으면 undefined를 반환한다.

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

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

  • map.clear(): 맵 안에 모든 요소를 제거한다.

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

  • map.keys(): 각 요소의 키를 모은 반복 가능한(iterable, 이터러블) 객체를 반환한다.

  • map.values(): 각 요소의 값을 모은 이터러블 객체를 반환한다.

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

  • forEach(value, key, map)

  • new Map(Object.entries(obj)): 객체를 맵으로 바꾸기

  • Object.fromEntries(map): 맵을 객체로 바꾸기

일반 객체와 차이점

  • 키의 타입에 제약이 없다. 객체도 키가 될 수 있다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    let john = { name: "John" };
      
    let visitsCountMap = new Map();
    visitsCountMap.set(john, 123);
    alert( visitsCountMap.get(john) ); // 123
      
    let visitsCountObj = {};
    visitsCountObj[john] = 123;
    alert( visitsCountObj["object Object"]); // 123
    
  • size 프로퍼티 등 유용한 메서드나 프로퍼티가 있다.

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

특징

  • map.set

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

주요 메서드와 프로퍼티

  • new Set([iterable]): 셋을 만든다. iterable 객체를 선택적으로 전달받을 수 있는데(대개 배열), 이터러블 객체 안의 요소는 셋을 초기화하는 데 쓰인다.
  • set.add(value): 값을 추가하고 셋 자신을 반환한다. 셋 내에 이미 value가 있는 경우 아무런 작업을 하지 않는다.
  • set.delete(value): 값을 제거한다. 호출 시점에 셋 내에 값이 있어서 제거에 성공하면 true, 아니면 false를 반환한다.
  • set.has(value)
  • set.clear()
  • set.size()
  • set.keys(): 셋 내의 모든 값을 포함하는 이터러블 객체를 반환한다.
  • set.values(): set.keys()와 동일한 작업을 한다. 과의 호환성을 위해 만들어진 메서드다.
  • set.entries(): 요소의 [값, 값]을 한 쌍으로 하는 이터러블 객체를 반환한다. 과의 호환성을 위해 만들어진 메서드다.
  • forEach(value, key, map)
  • new Map(Object.entries(obj)): 객체를 맵으로 바꾸기
  • Object.fromEntries(map): 맵을 객체로 바꾸기

맵과 셋에 반복 작업을 할 땐, 해당 컬렉션에 요소나 값을 추가한 순서대로 반복 작업이 수행된다. 따라서 이 두 컬렉션은 정렬이 되어 있지 않다고 할 수 없다. 그러나 컬렉션 내 요소나 값을 재 정렬하거나 (배열에서 인덱스를 이용해 요소를 가져오는 것처럼) 숫자를 이용해 특정 요소나 값을 가지고 오는 것은 불가능하다.

This post is licensed under CC BY 4.0 by the author.

HIWORK: Column 'regiDate' cannot be null

모던 자바스크립트 #5.8. 위크맵과 위크셋

Loading comments from Disqus ...