
Map, Set은 자료구조 중 하나로 기존의 객체나 배열보다 데이터의 구성, 검색, 사용을 효율적으로 처리할 수 있도록 한다.
: key - value로 구성
: 고유한 key에 value가 저장되어 있다.
| Map | object | |
|---|---|---|
| key | 모든 타입 가능 | 문자열/Symbol만 가능 |
| 크기 | size() 함수 | 배열로 변환한 후 length를 이용 |
| 값 전부 제거 | clear() 함수 | delete 연산자로 하나씩 삭제 |
| 키 존재 여부 | has() 함수 | obj.key로 undefined 여부 체크해야 함. (저장된 값이 undefined인 경우 모호해짐) |
| 반복문 | for of | for in |
| 성능 | 일반적으로 좋음 | 일반적으로 나쁨 |
아하! Map은 Object와 다르게 어떤 타입이든 key 값으로 사용 가능하고 다양한 함수를 제공해서 편리하게 데이터를 다를 수 있군!
const map = new Map();
map.set('one', 1);
map.set('two', 2);
map.set('three', 3);
map // Map(3) { 'one' => 1, 'two' => 2, 'three' => 3 }
map.get('one'); // 1
map.get('apple'); // undefined
map.delete('three'); // true
map // Map(2) { 'one' => 1, 'two' => 2 }
map.size // 2
map.has('two'); // true
map.has('apple'); // false
keys, values, entries 함수를 이용하면 Map Iterator가 반환되고 for-of 문을 이용하여 Map의 데이터들을 반복할 수 있게 된다.
map.keys(); // [Map Iterator] { 'one', 'two' }
map.values(); // [Map Iterator] { 1, 2 }
map.entries(); // [Map Entries] { [ 'one', 1 ], [ 'two', 2 ] }
for (const [key, value] of map.entries()) {
console.log(key, value);
}
: 고유한 값을 저장하는 자료구조
: Map과 다르게 key 없이 value만 저장
생성자로 배열을 넘겨주면 그 값으로 set이 생성된다.
const set = new Set(); // Set(0) {}
const numSet = new Set([1, 2, 3]); // Set(3) { 1, 2, 3 }
set.add('value1');
set.add('value2');
set.add('value2'); // 중복
set.add('value3');
set; // Set(3) { 'value1', 'value2', 'value3' }
set.delete('value3'); // true
set.delete('value4'); // false
set; // Set(2) { 'value1', 'value2' }
set.size // 2
set.has('value2'); // true
set.has('value4'); // false
Map과 같은 방식으로 Set iterator와 for-of 문을 이용한다. 하지만 set은 key를 가지지 않기 때문에 values만을 사용한다.
for (const value of set.values()) {
console.log(value);
}
set.clear();
set; // Set(0) {}