Map 객체
Map
key - value 쌍으로 이루어져있고, 키의 원래 삽입 순서를 기억한다.
모든 값이 key 또는 value로 사용될 수 있다.
Map에서 key는 오직 하나만 존재한다.
const map1 = new Map();
map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);
console.log(map1.get('a'));
// Expected output: 1
map1.set('a', 97);
console.log(map1.get('a'));
// Expected output: 97
console.log(map1.size);
// Expected output: 3
map1.delete('b');
console.log(map1.size);
// Expected output: 2
Map()
map의 생성자.
new map()으로 생성한다.
Map.set(key, value) / Map.get(key)
값을 추가하거나 업데이트 / 특정 요소 반환
set()메서드는 같은 Map 객체를 반환하기 때문에 아래와 같이 연속으로 호출할 수 있다.
// Add new elements to the map with chaining.
myMap.set("bar", "foo").set(1, "foobar").set(2, "baz");
Map.has(key)
Map 객체가 특정 키를 가지고 있는지 확인
return 값 : 만약 주어진 키에 해당하는 요소가 Map객체에 존재한다면 true, 그렇지 않으면 false
const map1 = new Map();
map1.set('bar', 'foo');
console.log(map1.has('bar'));
// Expected output: true
console.log(map1.has('baz'));
// Expected output: false
Map의 장점
ES6에서 추가된 Map은 많은 장점을 가지고 있다.
특히 기존의 Object와 비교되는데, Object에 비해 Map이 가진 장점을 알아보자.
1. Map의 키는 모든 값을 가질 수 있다.
Object는 키값으로 string만 가질 수 있었는데, map은 모든 값이 가능하다.
const map = new Map();
// 문자열 키
map.set("name", "John");
// 숫자 키
map.set(1, "One");
// 객체 키
const key = { id: 1 };
map.set(key, "Value");
console.log(map.get("name")); // John
console.log(map.get(1)); // One
console.log(map.get(key)); // Value
2. Map은 크기를 쉽게 얻을 수 있다.
Object는 크기를 수동으로 측정해야하지만,
Map 객체는 size 속성을 통해 요소의 개수를 쉽게 확인할 수 있다.
const map1 = new Map();
map1.set('a', 'alpha');
map1.set('b', 'beta');
map1.set('g', 'gamma');
console.log(map1.size);
// Expected output: 3
3. Map은 요소의 순서를 보장한다.
Object가 순서가 없는 것과 달리, Map은 데이터가 추가된 순서대로 요소의 순서를 보장한다. 그러므로 for..of, forEach문으로 순회가 가능하다.
const map = new Map();
map.set("a", 1);
map.set("b", 2);
map.set("c", 3);
// for of로 순회
for (const [key, value] of map) {
console.log(key, value);
}
// 출력
// a 1
// b 2
// c 3
// forEach로 순회
map.forEach((value, key) => {
console.log(key, value);
});
// 출력
// a 1
// b 2
// c 3
4. Map은 빠른 검색 및 삭제가 가능하다.
Object와 달리 map은 has, get, delete등의 메소드를 제공하여 빠른 검색 및 삭제가 가능하다.
const map = new Map();
map.set("a", 1);
map.set("b", 2);
map.set("c", 3);
console.log(map.has("a")); // 출력: true
console.log(map.get("b")); // 출력: 2
map.delete("c");
console.log(map.size); // 출력: 2
그렇다면 무엇을 쓰는게 좋은가?에 대한 답은 두가지로 할 수 있다.
1. 실행 시까지 키를 알수 없고, 모든 키가 동일한 type이며
모든 값들이 동일한 type일 경우에는 objects를 대신해서 map을 사용하자.
2. 각 개별 요소에 대해 적용해야 하는 로직이 있을 경우에는 objects를 사용하자.