[javascript]collections - Set, Map

프로그래밍에서 collections은 '프로그래밍 언어가 제공하는 값을 담을 수 있는 container를 의미한다.

Collections


파이썬의 list, tuple, dictionary / Java의 Queue,Stack, ArrayList같이 프로그래밍언어에는 컬렉션이 존재한다.

자바스크립트에 존재하는 컬렉션은 다음과 같다.

  • Indexed Collection: Array, Typed Array
  • Keyed Collection: Objects, Map, Set, Weak Map, Weak Set

Array와 Object 이전에도 존재했고, Object를 제외한 keyed(key 를 갖는 컬렉션) collection은 ES6 이후에 등장했다.

이 포스팅은 Keyed Collection에 대해 다룰 것이고, 이 컬렉션은 다른 언어의 HashTable(파이썬의 dictionary) 와 매우 유사하다.

Set


Set이란?

  • Set() 은 value 들로 이루어진 컬렉션
  • Array 와는 다르게 Set 은 같은 value 를 중복 포함할 수 없다. 따라서 Set 에 이미 존재하는 값을 추가하려고 하면 아무 일도 없음
  • Set()은 어떤 데이터가 자신의 멤버인지 확인하는 작업을 빠르게 할 수 있다.
    indexof(), has()사용
  • has() 는 indexOf() 보다 빠르다. 다만, index 이 존재하지 않기 때문에 index 로 value로 접근할 수 없다.

Set 메서드

  1. new Set: 비어있는 set을 생성
  2. new Set(iterable): 새로운 set에 iterable 객체의 데이터 추가
  3. set.size: set에 담겨있는 데이터의 개수 조회
  4. set.has(value): value가 set안에 존재하면 true return
  5. set.add(value): value를 set에 추가 (이미 존재하는 값이면 변화 없음)
  6. set.delete(value): value를 set에서 제거 (만약 set에 존재하지 않는 값이면 아무런 변화 없음) .add,.delete는 set 객체 자신을 리턴하기 때문에 구문 chainning이 가능하다.
  7. set.forEach(function): array의 forEach와 유사
    for(let value of set)
    	function(value,value,set);
  1. set.clear(): 모든 데이터 제거
  2. set.keys(), set.values(), set.entries(): 이터레이터 반환, Map과의 호환성을 위해 사용

Set에 구현되지 않은 것

  1. Array.prototype의 map,filter,some,every 등의 내장함수 미구현
  2. union, intersection과 같은 집합 연산 미구현

Map


Map이란?

  • Map() 은 자바스크립트의 key-value 페어(pair) 로 이루어진 컬렉션
  • key 를 사용해서 value 를 get, set 할 수 있음
  • key는 중복될 수 없음: 하나의 key 에는 하나의 value 만 가능
  • key 로 사용할 수 있는 데이터형: string, symbol(ES6), object, function => number 는 사용할 수 없음

Map 메서드

  1. new Map: 비어있는 map을 생성
  2. new Map(pairs): 새로운 map에 pairs 데이터 추가
  3. map.size: map에 담겨있는 엔트리 개수 조회
  4. map.has(key): 주어진 key가 존재하는지 확인 (key in obj 같은 역할)
  5. map.get(key): key과 연관된 value return (obj[key])
  6. map.set([key,value]): map에 key, value 엔트리 추가, 같은 key를 같는 엔트리의 경우, 기존의 데이터를 덮어쓴다. (obj[key] = value)
  7. map.delete(key): 엔트리 삭제 (delete ojb[key])
  8. map.clear(): 모든 데이터 제거
  9. map.forEach(f)
    for(let [key,value] of map) 
    	f(value,key,map);
  10. map.keys(), map.values(), map.entries()

참고) http://hacks.mozilla.or.kr/2015/12/es6-in-depth-collections/

좋은 웹페이지 즐겨찾기