맵과 셋
맴과 셋
객체, 배열 같은 자료구조 있지만 부족해서 맵 과 셋 탄생
-
맵
키가 있는 데이터 저장한다는 점에서 객체와 유사
키에 다양한 자료형 허용함에 있어서 객체와 차이 있음
키를 문자열로 변환하지 않고 그대로 유지
키로 객체 허용
-
주요 메서드, 프로퍼티
-
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 이 키 비교 하는 방식
sameValueZero 라는 알고리즘 사용.
=== 와 유사하지만 NaN 과 NaN 같다고 취급하는 것에서 차이 있음
맵에선 NaN 도 키로 쓸 수 있음
알고리즘 수정하거나 커스터마이징 불가능
-
체이닝
map.set은 호출할 때마다 맵 자신 반환하므로 체이닝 가능
-
맵의 요소에 반복 작업
-
map.keys() : 각 요소 키 모은 후 이터러블 객체 반환
-
map.values() : 각 요소 모은 이터러블 객체 반환
-
map.entries() : 요소의 [키, 값] 한 쌍으로 하는 이터러블 객체 반환. 이 이터러블 객체는 for..of 반복문의 기초로 쓰임
-
map.forEach() : 배열과 유사하게 지원
-
-
Object.entries : 객체를 맵으로 바꾸기
객체의 키-값 쌍을 요소([key, value]) 로 가지는 배열 반환
map 의 인자에 삽입
-
Object.fromEntries : 맵을 객체로 바꾸기
각 요소가 [키, 값] 쌍인 배열 객체로 변경.
map.entries() 를 인자로 넣으면 일반 객체 변환
인수로 이러터블 객체 받기 떄문에 entries() 안 붙여도 작동 같음
-
-
셋
중복을 허용하지 않는 값을 모아놓은 특별한 컬렉션
유일무이함을 확인하는데 최적화
배열에서 find 객체 사용해서 중복값 알아내는 것 보다 훨씬 빠름
-
주요 메서드
new Set(iterable) : 셋을 만듦. 이터러블 객체를 전달받으면(대개 배열을 전달받음) 그 안의 값을 복사해 셋에 넣어줌. set.add(value) : 값을 추가하고 셋 자신을 반환. set.delete(value) : 값을 제거. 호출 시점에 셋 내에 값이 있어서 제거에 성공하면 true, 아니면 false를 반환. set.has(value) – 셋 내에 값이 존재하면 true, 아니면 false를 반환. set.clear() – 셋을 비움. set.size – 셋에 몇 개의 값이 있는지 세줌.
-
셋의 값에 반복 작업하기
for..of, forEach 사용하면 셋 값 대상으로 반복 작업 수행 가능
-
forEach
콜백 함수에서 세개 인수 받음
값, 같은 값, 목표하는 객체 받음
맵과의 호환성 위해 값이 두번 나옴
맵, 셋은 서로 교체하기 쉬움.
-
메서드
set.keys() : 셋 내의 모든 값을 포함하는 이터러블 객체를 반환. set.values() – set.keys와 동일한 작업. 맵과의 호환성을 위해 만들어진 메서드. set.entries() – 셋 내의 각 값을 이용해 만든 [value, value] 배열을 포함하는 이터러블 객체를 반환. 맵과의 호환성을 위해 만들어짐.
-
-
요약
- 겍체, 배열같은 자료구조 부족해서 맵, 셋 탄생
- 맵은 키에 다양한 자료형 허용하며 값과 함께 저장
- 맵은 객체와 비교해 키 타입에 제약 없으며 size 프로퍼티 등의 유용한 메서드 존재
- 맵은 키를 문자열로 변환하지 않고 그대로 유지
- 맵의 다양한 메서드 존재
- map[key]는 map을 객체 처럼 취급하게 되어 올바른 방법 아님(get 권장)
- 객체의 키에 객체를 추가 시 객체는 문자열로 전환됨
- map은 키 비교할 떄 sameValueZero 라는 알고리즘 사용
- map.set은 호출 시 맵 자신이 반환되므로 체이닝 가능
- 맵은 이터러블 관련 다양한 메서드 존재
- Object.entries 로 객체를 키-값 쌍으로 바꾸어 맵으로 바꾸기 가능
- Object.fromEntries 로 맵을 Map.entries()로 키-값 쌍으로 만들어 객체로 바꾸기 가능
- 셋은 중복을 허용하지 않는 값을 모아놓은 특별한 컬렉션
- 셋 내장 메서드 존재.
- 셋 이터러블중 forEach 는 map과의 호환성 때문에 인자 3개 받음
- 맵과 셋은 서로 교체하기 쉬우며 호환성 어느정도 보장.
- 맵과 셋은 값을 추가한 순서대로 반복 작업 수행