Map
맵(Map) 은 키가 있는 데이터를 저장하는 점에서 객체와 비슷하지만 맵의 키에는 객체와는 다르게 다양한 자료형을 사용할 수 있음
맵의 주요 메서드
- 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의 선언
let map1 = new Map();
//맵에 값 할당(다양한 자료형 사용)
map1.set('1','first');
map1.set(2,'second');
map1.set(false,'third');
//맵의 값(value) 가져오기
console.log(`1: ${map1.get('1')} , 2: ${map1.get(2)} , 3:${map1.get(false)}`)

Map의 요소로 반복작업하기
다음 메서드들과 for .. of을 통해 맵을 이용해 반복작업을 할 수 있음
- map.keys() : 요소들의 키를 모아놓은 이터러블 객체를 반환
- map.values() : 요소들의 값을 모아놓은 이터러블 객체를 반환
- map.entries() : 요소들의 키, 값 을 모아놓은 이터러블 객체를 반환
//해당 형태로도 값 할당 가능
let myMap = new Map([
["firstName","namsu"],
["lastName","park"],
["age",27]
]);
//키를 대상으로 하여 반복
for(let key of myMap.keys()){
console.log(`key : ${key}`)
}
//값을 대상으로 하여 반복
for(let val of myMap.values()){
console.log(`value : ${val}`)
}
//키 , 값 쌍을 대상으로 하여 반복
for(let entry of myMap.entries()){ // myMap 으로 반복해도 entries 와 동일
console.log(`key , value : ${entry}`)
}

맵은 또한 배열처럼 forEach 메서드를 사용할 수 있음
let myMap = new Map([
["firstName","namsu"],
["lastName","park"],
["age",27]
]);
myMap.forEach(( val, key, map) => {
console.log(`${key} : ${val}`)
console.log(`map : ${map}`)
})
객체를 맵으로 변경
Object.entries는 일반 객체를 키, 값 쌍을 요소로 가지는 배열을 생성해 주어 이를 이용하여 맵을 생성할 수 있음
let person = {
name:"park",
age:25,
gender:"male"
}
let entries = Object.entries(person); // Object.entries 이용해 객체를 배열로 생성
let map = new Map(entries); // entries로 맵을 생성
console.log(entries)
console.log(map)

맵을 객체로 변경
Object.fromEntries 는 [키, 값] 의요소를 가지고 있는 배열을 객체로 바꿔줌.
map.entries() 의 메서드는 맵을 [키,값] 의 배열로 바꾸어주는 메서드이므로 Object.fromEntries 를 이용해 맵을 객체로 변경할 수 있음
let menu = new Map(
[
["pasta",1],
["steak",2],
["fried rice",3]
]
); // map 을 생성
let entries = menu.entries(); //map의 [키,값] 형태의 배열을 생성
let object = Object.fromEntries(entries); //배열을 객체로 변환
console.log(object);

Set
셋(Set)은 중복을 허용하지 않는 값을 모아놓은 특별한 컬렉션임. 셋에는 키가 없는 값이 저장됨
셋의 주요 메서드
- new Set(iterable) – 셋을 만듬. 이터러블 객체를 전달받으면(대개 배열을 전달받음) 그 안의 값을 복사해 셋에 넣어줌.
- set.add(value) – 값을 추가하고 셋 자신을 반환
- set.delete(value) – 값을 제거 호출 시점에 셋 내에 값이 있어서 제거에 성공하면 true, 아니면 false를 반환
- set.has(value) – 셋 내에 값이 존재하면 true, 아니면 false를 반환
- set.clear() – 셋을 비움
- set.size – 셋에 몇 개의 값이 있는지 카운트
셋에는 똑같은 값이 중복으로 들어가지 않음
let num_set = new Set();
num_set.add(10);
num_set.add(10);
num_set.add(10);
num_set.add(5);
num_set.add(5);
num_set.add(5);
console.log(num_set) // 중복값이 들어가지 않으므로 추가는 6개를 했지만 요소의 개수는 5,6 두개임

참조:https://ko.javascript.info/map-set
'JavaScript > JavaScript기초' 카테고리의 다른 글
| [Javascript] 이터러블(iterable) (0) | 2021.09.05 |
|---|---|
| [Javascript] 구조 분해 할당 (0) | 2021.09.02 |
| [Javascript] 배열의 메서드2 (0) | 2021.08.31 |
| [Javascript] 배열의 메서드1 (0) | 2021.08.31 |
| [Javascript] 숫자형 (0) | 2021.08.31 |