키가 있는 데이터를 저장한다는 점, 객체와 유사
다만 키에 다양한 자료형을 허용한다는 점
<map[key]는 Map을 쓰는 바른 방법이 아님>
이 방법은 map을 일반 객체처럼 취급하게 됨
따라서 map전용 메서드 set get등을 사용해야함
let recipMap = new Map([
['cucumber', 500],
['tomatoes', 350],
['onion', 50]
]);
for (let vegetable of recipeMap.keys()) {
alert(vegetable); //cucumber, tomatoes, onion
}
for (let amount of recipeMap.values()) {
alert(amount); //500, 350, 50
}
for (let entry of recipeMap) {
alert(entry) //cucumber, 500.....
}
<맵은 삽입순서를 기억함>
객체가 프로퍼티 순서를 기억하지못하는 것과 다르게, 맵은 값이 삽입된 순서대로 순회를 실시
각 요소가 키-값 쌍인 배열이나 이터러블 객체를 초기화 용도로 맵에 전달해 새로운 맵을 만들 수 있음
평범한 객체를 가지고 맵을 만들고 싶다면 내장 메서드 Object.entries(obj)를 활용해야함, 이 메서드는 객체의 키-값 쌍을 요소 ([key, value])로 가지는 배열을 만듬
let obj = {
name: "John",
age: 30
};
let map = new Map(Object.entries(obj));
alert(map.get('name'));
object.entries를 사용해 객체 obj를 배열 [['name', 'john'],['age', 30]]으로 바꾸고, 이 맵을 이용해 새맵을 만듬
let prices = Object.fromEntries([
['banana', 1],
['orange', 2],
['meat', 4]
]);
//now prices = {banana: 1, orange: 2, meat: 4}
중복을 허용하지 않는 값을 모아놓은 컬렉션, set에 키가 없는 값이 저장됨
new Set(iterable) : 셋을 만듬, 이터러블 객체를 전달받으면 그 안의 값을 복사해 셋에 넣어줌
set.add(value) : 값을 추가하고 셋 자신을 반환합니다,
// 셋 내에 동일한 값이 있다면 set.add(value)를 해도 달라지지않음
set.delete(value) : 값을 제거합니다.호출 시점에 셋 내에 값이 있어서 제거에 성공하면 true, 아니면 false를 반환
set.has(value) : 셋 내에 값이 존재하면 true, 아니면 false를 반환
set.clear() : 셋을 비움
set.size() : 셋에 몇 개의 값이 있는지 세어줌
let set = new Set()
let john = {name : 'John'};
let pete = {name : 'Pete'};
let mary = {name; 'Mary'};
set.add(John);
set.add(Pete);
set.add(Mary);
set.add(John);
alert(set.size);
for (let user of set) {
alert(user.name)l // John, Pete, Mary순으로 출력
}
중복 값 여부는 배열 메서드인 arr.find를 이용해 확인할 수도 있지만 이는 배열 내 요소 전체를 뒤져 중복 값을 찾기 때문에, 셋보다 성능 면에서 떨어짐
for...of나 forEach를 사용하면 셋의 값을 대상으로 반복 작업을 수행할 수 있음
let set = new Set(['oranges', 'apples', 'bananas']);
for (let value of set) alert(value);
1) 배열에서 중복 요소 제거하기
function unique(arr) {
let answer = new Set()
}
2)애너그램 걸러내기
function aclean(arr) {
}
3)반복 가능한 객체의 키
```javascript