JavaScript

[JavaScript] Map 객체(Map Object) 메서드 및 반복문 사용 방법

cob 2022. 12. 1. 16:02

 

Map

 

Map Obejct란?
ES6에 새롭게 추가된 자료구조로 현실 세계를 반영하기엔 객체(Object)와 배열(Array)  만으론 부족해서 
맵(Map)과 셋(Set) 이 등장하게 되었다.

 

 

Obeject와 Map 차이
1) Map은 객체(Object)와 달리 key를 문자형으로 변환하지 않는다. key엔 자료형 제약이 없다.
2) Map은 값이 삽입된 순서를 기억하여 순서대로 순회를 실시하지만, 객체(Obejct)는 순서를 못 한다.
3) Map을 객체(Obejct)처럼 map [key] 방식으로 사용할 수 있지만, 그렇게 되면 Map을 일반 객체(Object)로 취급하게 된다.

 

 


1. Map 주요 메서드 사용 방법


  
// Map Object 선언
let map = new Map()
// let map = new Map([['a', 1]]) iterable 객체 전달
// key를 이용해 value를 저장
map.set(key, value)
// key에 해당하는 값을 반환, key가 존재하지 않으면 undefined를 반환한다.
map.get(key)
// key가 존재하면 true, 존재하지 않으면 false를 반환
map.has(key)
// key에 해당하는 값을 삭제
map.delete(key)
// 맵 안의 모든 요소를 제거
map.clear() – 맵 안의 모든 요소를 제거합니다.
// 요소의 개수를 반환
map.size

 

 

1-1) 객체(Object)를 key로 사용하는 방법


  
let john = { name: "John" };
// 고객의 가게 방문 횟수를 저장하는 map
let visitsCountMap = new Map();
// john을 맵의 키로 사용
visitsCountMap.set(john, 123);
alert( visitsCountMap.get(john) ); // 123

 

1-2) 체이닝 방법


  
let map = new Map();
map.set('1', 'str1')
.set(1, 'num1')
.set(true, 'bool1');
  • map.set을 호출할 때마다 맵 자신이 반환된다. 이를 이용하면 map.set을 '체이닝(chaining)'할 수 있다.

 


2. Map 반복문 사용 방법


  
let map = new Map([
['cucumber', 500],
['tomatoes', 350],
['onion', 50]
]);
// key를 대상으로 순회합니다.
for (let key of map.keys()) {
alert(key); // cucumber, tomatoes, onion
}
// value을 대상으로 순회합니다.
for (let value of map.values()) {
alert(value); // 500, 350, 50
}
// [키, 값] 쌍을 대상으로 순회합니다.
for (let [key, value] of map) { // map.entries()와 동일합니다.
alert(key + "," + value); // cucumber,500 ...
}
  • map.keys()  : 각 요소의 키를 모은 반복 가능한(iterable, 이 트러블) 객체를 반환합니다.
  • map.values() : 각 요소의 값을 모은 이터러블 객체를 반환합니다.
  • map.entries() : 요소의 [키, 값]을 한 쌍으로 하는 이터러블 객체를 반환합니다. 이 이터러블 객체는 for..of반복문의 기초로 쓰입니다.
iterable 객체란?
반복 가능한(iterable, 이터러블)객체는 배열을 일반화한 객체입니다. 이터러블 이라는 개념을 사용하면 어떤 객체에든for..of 반복문을 적용할 수 있습니다.

 

2-1) forEach문 사용 가능


  
// 각 (키, 값) 쌍을 대상으로 함수를 실행
map.forEach( (value, key, map) => {
alert(`${key}: ${value}`); // cucumber: 500 ...
});
  • Map은 배열과 마찬가지로 내장 메서드 forEach도 사용 가능

 

 


3. Map 변환

3-1) 객체(Object) => Map 변환


  
// 각 요소가 [키, 값] 쌍인 배열
let map = new Map([
['1', 'str1'],
[1, 'num1'],
[true, 'bool1']
]);
alert( map.get('1') ); // str1
  • 객체의 키-값 쌍을 요소([key, value])로 가지는 배열을 반환

 

3-2) Map => 객체(Object) 변환


  
let prices = Object.fromEntries([
['banana', 1],
['orange', 2],
['meat', 4]
]);
// now prices = { banana: 1, orange: 2, meat: 4 }
alert(prices.orange); // 2
반응형