[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 메서드
new Set
: 비어있는 set을 생성
new Set(iterable)
: 새로운 set에 iterable 객체의 데이터 추가
set.size
: set에 담겨있는 데이터의 개수 조회
set.has(value)
: value가 set안에 존재하면 true return
set.add(value)
: value를 set에 추가 (이미 존재하는 값이면 변화 없음)
set.delete(value)
: value를 set에서 제거 (만약 set에 존재하지 않는 값이면 아무런 변화 없음) .add,.delete는 set 객체 자신을 리턴하기 때문에 구문 chainning이 가능하다.
set.forEach(function)
: array의 forEach와 유사
for(let value of set)
function(value,value,set);
set.clear()
: 모든 데이터 제거
set.keys()
, set.values()
, set.entries()
: 이터레이터 반환, Map과의 호환성을 위해 사용
Set에 구현되지 않은 것
- Array.prototype의
map
,filter
,some
,every
등의 내장함수 미구현
union
, intersection
과 같은 집합 연산 미구현
Map
Map이란?
- Map() 은 자바스크립트의 key-value 페어(pair) 로 이루어진 컬렉션
- key 를 사용해서 value 를 get, set 할 수 있음
- key는 중복될 수 없음: 하나의 key 에는 하나의 value 만 가능
- key 로 사용할 수 있는 데이터형: string, symbol(ES6), object, function => number 는 사용할 수 없음
Map 메서드
new Map
: 비어있는 map을 생성
new Map(pairs)
: 새로운 map에 pairs 데이터 추가
map.size
: map에 담겨있는 엔트리 개수 조회
map.has(key)
: 주어진 key가 존재하는지 확인 (key in obj
같은 역할)
map.get(key)
: key과 연관된 value return (obj[key]
)
map.set([key,value])
: map에 key, value 엔트리 추가, 같은 key를 같는 엔트리의 경우, 기존의 데이터를 덮어쓴다. (obj[key] = value
)
map.delete(key)
: 엔트리 삭제 (delete ojb[key]
)
map.clear()
: 모든 데이터 제거
map.forEach(f)
for(let [key,value] of map)
f(value,key,map);
map.keys()
, map.values()
, map.entries()
indexof(), has()사용
new Set
: 비어있는 set을 생성new Set(iterable)
: 새로운 set에 iterable 객체의 데이터 추가set.size
: set에 담겨있는 데이터의 개수 조회set.has(value)
: value가 set안에 존재하면 true returnset.add(value)
: value를 set에 추가 (이미 존재하는 값이면 변화 없음)set.delete(value)
: value를 set에서 제거 (만약 set에 존재하지 않는 값이면 아무런 변화 없음) .add,.delete는 set 객체 자신을 리턴하기 때문에 구문 chainning이 가능하다.set.forEach(function)
: array의 forEach와 유사 for(let value of set)
function(value,value,set);
set.clear()
: 모든 데이터 제거set.keys()
, set.values()
, set.entries()
: 이터레이터 반환, Map과의 호환성을 위해 사용map
,filter
,some
,every
등의 내장함수 미구현union
, intersection
과 같은 집합 연산 미구현Map이란?
- Map() 은 자바스크립트의 key-value 페어(pair) 로 이루어진 컬렉션
- key 를 사용해서 value 를 get, set 할 수 있음
- key는 중복될 수 없음: 하나의 key 에는 하나의 value 만 가능
- key 로 사용할 수 있는 데이터형: string, symbol(ES6), object, function => number 는 사용할 수 없음
Map 메서드
new Map
: 비어있는 map을 생성new Map(pairs)
: 새로운 map에 pairs 데이터 추가map.size
: map에 담겨있는 엔트리 개수 조회map.has(key)
: 주어진 key가 존재하는지 확인 (key in obj
같은 역할)map.get(key)
: key과 연관된 value return (obj[key]
)map.set([key,value])
: map에 key, value 엔트리 추가, 같은 key를 같는 엔트리의 경우, 기존의 데이터를 덮어쓴다. (obj[key] = value
)map.delete(key)
: 엔트리 삭제 (delete ojb[key]
)map.clear()
: 모든 데이터 제거map.forEach(f)
for(let [key,value] of map) f(value,key,map);
map.keys()
,map.values()
,map.entries()
참고) http://hacks.mozilla.or.kr/2015/12/es6-in-depth-collections/
Author And Source
이 문제에 관하여([javascript]collections - Set, Map), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yujin1760/javascriptcollections-Set-Map저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)