📌 Map이란?
key:value 형태로 저장할 수 있는 자료구조이다.
⭐️ Map 특징
- key 값으로 다양한 자료형이 가능하다.
- 삽입 순서를 기억하고(이터러블 객체), 삽입된 순서대로 순회한다.
📌 Map vs 객체
⭐️ 공통점
- key-value 형태로 저장한다.
- 인덱스를 사용하지 않는다.
- key 값 중복을 허용하지 않는다.
⭐️ 차이점
- map은 key 값으로 다양한 자료형이 가능하지만, 객체의 key 값은 항상 string 형태이다.
- map은 삽입된 순서를 기억하지만, 객체는 삽입된 순서를 기억하지 않는다.
📌 Map 메서드
- new Map() - 맵을 생성한다.
- map.set(key, value) - key:value 형태로 요소를 저장한다.
- map.get(key) - key에 해당하는 value 값을 반환한다. key가 존재하지 않으면 undefined를 반환한다.
- map.has(key) - key가 존재하면 true를, 존재하지 않는다면 false를 반환한다.
- map.delete(key) - key에 해당하는 요소를 삭제한다.
- map.clear() - map의 모든 요소를 삭제한다.
- map.size - map의 요소 개수를 반환한다.(괄호 붙이지 않기!!)
만약 map을 생성과 동시에 초기화하고 싶다면, map 생성자의 인자로 이차원 배열을 넣어주면 된다.
const newMap = new Map([
[1, "a"],
[2, "b"],
[3, "c"],
[4, "d"],
]);
📌 Map 순회
- map.keys() - key 값들만 모아서 반복 가능한 이터러블 객체를 반환한다.
- map.values() - value 값들만 모아서 반복 가능한 이터러블 객체를 반환한다.
- map.entries() - [key, value]를 쌍으로 하는 반복 가능한 이터러블 객체를 반환한다.
위의 메서드들을 이용해서 map을 순회할 수 있다.
const newMap = new Map([
[1, "a"],
[2, "b"],
[3, "c"],
[4, "d"],
]);
for (const key of newMap.keys()) {
console.log(key); // 1 2 3 4
}
for (const value of newMap.values()) {
console.log(value); // a b c d
}
for (const [key, value] of newMap.entries()) {
console.log("key : " + key + ", value : " + value);
// key : 1, value: a
// key : 2, value: b
// key : 3, value: c
// key : 4, value: d
}
forEach도 사용가능하다.
newMap.forEach((value, key, map) => {
console.log(value, key, map);
});
value, key 그리고 forEach를 호출한 map을 인자로 가진다.
📌 map -> 객체, 객체 -> map
- map을 객체로 바꾸기 -> Object.fromEntries()
map을 배열로 바꾸고, Object.fromEntries()를 시켜주면 객체로 변환된다.
const newMap = new Map([
[1, "a"],
[2, "b"],
[3, "c"],
[4, "d"],
]);
const obj = Object.fromEntries(newMap.entries());
console.log(obj); // { '1': 'a', '2': 'b', '3': 'c', '4': 'd' }
- 객체를 map으로 바꾸기 -> Object.entries()
Object.entries()로 객체를 배열로 바꾸고, map의 생성자에 넣어주면 map으로 변환된다.
const obj = {
1: "a",
2: "b",
3: "c",
4: "d",
};
const newMap = new Map(Object.entries(obj));
console.log(newMap); // { '1' => 'a', '2' => 'b', '3' => 'c', '4' => 'd' }
📌 Set이란?
중복을 허용하지 않는 자료구조이다.
⭐️ Set 특징
- 인덱스가 존재하지 않는다.
- 삽입 순서를 기억하고(이터러블 객체), 삽입된 순서대로 순회한다. (map과 동일)
📌 Set vs 배열
⭐️ 공통점
- 데이터 저장 순서를 유지한다.
⭐️ 차이점
- set은 중복을 허용하지 않지만, 배열은 중복을 허용한다.
- set에는 인덱스가 존재하지 않지만, 배열에는 인덱스가 존재한다.
📌 Set 메서드
- new Set() - Set을 생성한다.
- set.add(value) - 값을 추가하고 set을 반환한다.
- set.delete(value) - value에 해당하는 요소를 삭제한다.
value에 해당하는 요소가 존재한다면 true, 존재하지 않는다면 false를 반환한다. - set.has(value) - value에 해당하는 요소가 존재하면 true, 존재하지 않는다면 false를 반환한다.
- set.clear() - set의 모든 요소를 삭제한다.
- set.size - set의 요소 개수를 반환한다.(괄호 붙이지 않기!!)
만약 set을 생성과 동시에 초기화하고 싶다면, set 생성자의 인자로 이터러블 객체를 넣어주면 된다.
이터러블 객체의 값을 복사해서 set에 넣는다.
const newSet = new Set(["a", "b", "c", "d", "a"]);
console.log(newSet); // Set(4) { 'a', 'b', 'c', 'd' }
📌 Set 순회
- for...of 사용
const newSet = new Set(["a", "b", "c", "d", "a"]);
for (const element of newSet) {
console.log(element); // a b c d
}
- forEach 사용
const newSet = new Set(["a", "b", "c", "d", "a"]);
newSet.forEach((value, valueAgain, set) => {
console.log(value, valueAgain, set);
});
map과 마찬가지로 3개의 인자를 가진다.
첫번째와 두번째 인자는 set의 값이고 세번째 인자는 forEach를 호출한 set이다.
🤔 왜 동일한 인자를 두개 가지는걸까?
map과의 호환성 때문이다.
쉽게 말하자면 map과 set에서 동일한 인터페이스를 제공하기 위함이다.
📌 set -> 배열, 배열 -> set
- set을 배열로 바꾸기
Array.from에 넣어주거나 스프레드 연산자(...)을 사용하면 배열로 변환된다.
const newSet = new Set([1, 2, 3]);
const array = Array.from(newSet);
const array2 = [...newSet];
console.log(array); // [1, 2, 3]
console.log(array2); // [1, 2, 3]
- 배열을 set으로 바꾸기
배열을 set 생성자에 넣어주면 set으로 변환된다.
const array = [1, 2, 3];
const newSet = new Set(array);
console.log(newSet); // Set(3) { 1, 2, 3 }
'HTML,CSS,JS' 카테고리의 다른 글
[JS] let, var, const(+호이스팅, TDZ...) (0) | 2025.01.17 |
---|---|
[CSS] CSS 가상요소 선택자(::before, ::after) (0) | 2025.01.15 |
[CSS] RequestAnimationFrame (0) | 2024.10.08 |
[JS] Array와 Array 메소드 (0) | 2024.08.26 |
[JS] Class (0) | 2024.08.13 |