Map 객체는 키와 값의 쌍으로 이루어진 자료구조이다.
Map 객체는 객체와 유사하지만 다음과 같은 차이가 있다.
구분 | 객체 | Map 객체 |
---|---|---|
키로 사용할 수 있는 값 | 문자열 또는 심벌 값 | 객체를 포함한 모든 값 |
이터러블 | X | O |
요소 개수 확인 방법 | object.keys(obj).length | map.size |
Map 객체는 Map 생성자 함수로 생성한다.
Map 생성자 함수에 인수를 전달하지 않으면 빈 Map 객체가 생성된다.
const map = new Map();
console.log(map); // Map(0) {}
Map 생성자 함수는 이터러블을 인수로 전달받아 Map 객체를 생성한다.
인수로 전달되는 이터러블은 key와 value의 쌍으로 이루어진 요소로 구성되어야 한다.
const map1 = new Map([["key1", "value1"], ["key2", "value2"]]);
console.log(map1); // {"Key1" => "value1", "key2" => "value2"}
Map 생성자 함수는 인수로 전달한 이터러블에 중복된 키를 갖는 요소가 존재하면 값이 덮어써진다. → Map 객체에는 중복된 키를 갖는 요소가 존재할 수 없다.
const map = new Map([["key1", "value1"], ["key1", "value2"]]);
console.log(map); // Map(1) {"key1" => "value2"}
Map.prototype.size 프로퍼티를 사용한다.
const { size } = new Map([["key1", "value1"], ["key2", "value2"]]);
console.log(size); // 2
const map = new Map([["key1", "value1"], ["key2", "value2"]]);
map.size = 10; // size 프로퍼티에 숫자를 할당하여 Map 객체의 요소 개수를 변경할 수 없다.
console.log(map.size); // 2
Map.prototype.set 메서드를 사용한다.
const map = new Map();
console.log(map); // Map(0) {}
map.set("key1", "value1");
console.log(map); // Map(1) {"key1" => "value1"}
set 메서드는 새로운 요소가 추가된 Map 객체를 반환한다.
set 메서드를 호출한 후에 set 메서드를 연속적으로 호출(method chaining)할 수 있다.
const map = new Map();
map
.set("key1", "value1")
.set("key2", "value2");
console.log(map); // Map(2) {"key1" => "value1", "key2" => "value2"}
Map.prototype.get 메서드를 사용한다.
const map = new Map();
map
.set("key1", "value1")
.set("key2", "value2");
console.log(map.get('key1')); // value1
Map 객체는 이터러블이면서 동시에 이터레이터인 객체를 반환하는 메서드를 제공한다.
Map 메서드 | 설명 |
---|---|
Map.keys() | Map 객체에서 요소키를 값으로 갖는 이터러블이면서 동시에 이터레이터인 객체를 반환한다. |
Map.values() | Map 객체에서 요소값를 값으로 갖는 이터러블이면서 동시에 이터레이터인 객체를 반환한다. |
Map.entries() | Map 객체에서 요소키와 요소값을 값으로 갖는 이터러블이면서 동시에 이터레이터인 객체를 반환한다. |
const map = new Map([['key1', 'value1'], ['key2', 'value2']])
for (const key of map.keys()) {
console.log(key); // key1, key2
}
for (const value of map.values()) {
console.log(value); // value1, value2
}
for (const entry of map.entries()) {
console.log(entry); // (2) ['key1', 'value1'], (2) ['key2', 'value2']
}