Map 객체는 데이터를 수집하여 활용하기 위한 객체이다. "키"와 "값"의 쌍을 Map 객체 안에 저장하여 사용한다.
Map 안에서 키는 고유한 값이며, 키와 값의 데이터 타입에는 제한이 없다.
new Map() – 맵을 만듭니다.
map.set(key, value) – key를 이용해 value를 저장.
map[key]는 Map을 쓰는 바른 방법이 아니다.
map[key] = 2로 값을 설정하는 것 같이 map[key]를 사용할 수 있지만, 이 방법은 map을 일반 객체처럼 취급하게 된다. 따라서 여러 제약이 생기게 된다.
map을 사용할 땐 map전용 메서드 set, get 등을 사용해야만 한다 .
map.get(key) – key에 해당하는 값을 반환. key가 존재하지 않으면 undefined를 반환.
map.has(key) – key가 존재하면 true, 존재하지 않으면 false를 반환.
map.delete(key) – key에 해당하는 값을 삭제.
map.clear() – 맵 안의 모든 요소를 제거.
map.size – 요소의 개수를 반환.
map.keys() – 각 요소의 키를 모은 반복 가능한(iterable, 이터러블) 객체를 반환.
map.values() – 각 요소의 값을 모은 이터러블 객체를 반환.
map.entries() – 요소의 [키, 값]을 한 쌍으로 하는 이터러블 객체를 반환. 이 이터러블 객체는 for..of반복문의 기초로 쓰인다.
let recipeMap = new Map([
['cucumber', 500],
['tomatoes', 350],
['onion', 50]
]);
console.log(recipeMap);
console.log(recipeMap.keys());
console.log(recipeMap.values());
console.log(recipeMap.entries());
// 키(vegetable)를 대상으로 순회합니다.
for (let vegetable of recipeMap.keys()) {
console.log(vegetable); // cucumber, tomatoes, onion
}
//결과
Map(3) {"cucumber" => 500, "tomatoes" => 350, "onion" => 50}
MapIterator {"cucumber", "tomatoes", "onion"}
MapIterator {500, 350, 50}
MapIterator {"cucumber" => 500, "tomatoes" => 350, "onion" => 50}
cucumber
tomatoes
onion
Set 객체는 중복되지 않는 유일한 데이터를 수집하여 활용하기 위한 객체이다.
Set 값의 데이터 타입에는 제한이 없다.
객체 타입, 원시 타입 모두 가능하다.
let set1 = new Set();
console.log(set1)
//-> Set { }
let set2 = new Set(["oranges", "apples", "bananas"]);
// -> Set(3) {"oranges", "apples", "bananas"}
let set3 = new Set();
let john = { name: "John" };
let pete = { name: "Pete" };
let mary = { name: "Mary" };
set3.add(john);
set3.add(pete);
set3.add(mary);
//Set {{name: "John"},{name: "Pete"},{ name: "Mary" }}
let set = new Set();
set.add(value) – 값을 추가하고 셋 자신을 반환합니다.
set.delete(value) – 값을 제거합니다. 호출 시점에 셋 내에 값이 있어서 제거에 성공하면 true, 아니면 false를 반환합니다.
set.has(value) – 셋 내에 값이 존재하면 true, 아니면 false를 반환합니다.
set.clear() – 셋을 비웁니다.
set.size – 셋에 몇 개의 값이 있는지 세줍니다.
set.values()
set.keys()
Set에서 values()과 keys()는 같다.
for(let value of set1){
console.log(value)
}
set1.forEach((value1, value2, set) => {
console.log(value1);
});