Map은 [키, 값]을 요소로 가지며, 객체와 다른 점은 키에 객체를 포함한 다양한 자료형을 허용한다. 또한 키-값 쌍과 키의 원래 삽입 순서를 기억한다.
const map = new Map();
Map.prototype.size
: 요소의 개수를 반환
Map.prototype.has(key)
: key 존재 여부 불리언 반환
Map.prototype.delete(key)
: 키에 해당하는 값을 삭제
Map.prototype.clear()
: 맵 안의 모든 요소를 제거
Set는 중복을 허용하지 않는 집합이다.
const set = new Set([]); // 빈 배열로 초기화
const set = new Set([1, 2, 3]);
set
map.set(key, value)
: 맵에 키에 따른 값 설정map.set("firstName", "wonil");
map[key] = value
맵에 이와 같이 값을 할당하는 것이 가능하나, 이 방법은 map을 일반 객체처럼 취급하게 되므로 set를 사용해야만 한다.
let wonil = { name: 'Wonil' }
let visitsCountMap = new Map();
visitsCountMap.set(wonil, 100);
체이닝
map.set
을 호출할 때마다 맵 자신이 반환되므로 ‘체이닝’이 가능하다.map.set('banana', 1000) .set('strawberry', 3000)
get
주어진 키에 해당하는 값을 반환하거나 값이 없다면 undefined
을 반환
map.keys()
: 각 요소의 키를 모은 반복 가능한 객체(이터러블 객체)를 반환map.values()
: 각 요소의 값을 모은 이터러블 객체를 반환map.entries()
: 요소의 [키, 값] 을 한 쌍으로 하는 이터러블 객체를 반환하며, 이 객체는 for ..of
반복문의 기초로 쓰인다.맵 반환값에 배열 메서드 적용
keys(), values(), entries() 모두 이터러블 객체를 반환하므로
Array.from()
을 이용하여 맵을 배열로 변환 후 배열 메서드를 적용해야 한다.
삽입 순서
맵은 값이 삽입된 순서로 순회를 실시하며, 이는 객체가 프로퍼티 순서를 기억하지 못하는 것과 다른 점이다.
- 변환: 각 요소가 키-값 쌍인 배열이나 이터러블 객체를 초기화 용도로 맵에 전달해 새로운 맵을 만들 수 있다.
let map = new Map([
['banana', 1000],
['strawberry', 3000]
]);
Object.entries
: 평범한 객체를 맵으로 변환 시 사용할 수 있는 메서드로, 객체의 키-값 쌍을 요소로 가지는 배열을 반환한다. let obj = {
name: 'wonil',
age: 26
};
let map = new Map(Object.entries(obj));
Object.fromEntries
: 맵을 객체로 변환 시 사용할 수 있는 메서드로, 각 요소가 [키, 값] 쌍인 배열을 객체로 변환한다. let prices = Object.fromEntries([
['banana', 100],
['orange', 20],
['meat', 400]
]);
// prices = { banana: 100, orange: 20, meat: 400 }
let map = new Map();
map.set('banana', 100);
map.set('orange', 20);
map.set('meat', 400);
let obj = Object.fromEntries(map.entries());
// let obj = Object.fromEntries(map); => entries 생략가능
// obj = { banana: 100, orange: 20, meat: 400 }
const obj1 = { name: "🍎", price: 8 };
const obj2 = { name: "🍰", price: 5 };
const objs = new Set([obj1, obj2]);
obj1.price = 10;
objs.add(obj1);
const obj3 = { name: "🍰", price: 5 };
objs.add(obj3);
set.size
: 세트의 값 갯수 반환set.has(value)
: 세트의 요소 존재 유무를 불리언으로 반환set.add(element)
: 세트에 요소를 추가(중복을 허용하지 않음)set.delete(element)
: 세트의 해당요소를 삭제set.clear()
: 세트의 모든 요소를 삭제set.keys()
set.values()
set.entries()
forEach
for..of
// 전개 구문을 사용하여 set을 배열로 변형
console.log([...se]);
// 대소문자 구문 (set은 "F"와 "f"를 모두 가지게 됨)
new Set("Firefox");
https://school.programmers.co.kr/learn/courses/30/lessons/120883
function solution(id_pw, db) {
const map=new Map(db);
const [id,pw]=id_pw;
if(map.has(id)){
if(pw===map.get(id)){
return 'login';
}else{
return 'wrong pw';
}
}else{
return 'fail';
}
}
https://www.acmicpc.net/problem/1351
let n, p, q;
const d = new Map();
const recurse = (x) => {
if (d.has(x)) {
return d.get(x);
}
d.set(x, recurse(Math.floor(x / p)) + recurse(Math.floor(x / q)));
return d.get(x); // d[x]가 아님에 유의
};
(async () => {
let rl = readline.createInterface({ input: process.stdin });
// 입력 받기...
d.set(0, 1);
recurse(n);
console.log(d.get(n));
})();