반응형
1. Map & Set 소개
1-1. Map ?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
Map 객체는 key - value 로 이루어지며, 키의 삽입 순서를 기억한다
또한, 어느 값(any value)이든 key - value 값으로 사용할 수 있다
key - value 형태가 기본적으로 Object 객체와 비슷한 형태이지만,
위와 같은 특성을 가진 객체를 Map 으로 정의한다
이는 다음 상황일 때 사용을 고려할 수 있다고 한다
- key값에 문자열이 아닌 어느 값이든 넣을 수 있다
- 객체의 size를 알아야 할 경우나
객체의 값을 자주 변경하고 존재유무 및 특정 key의 index를 판단하는 일이 잦을 때
1-2. Set ?
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Set
Set 객체는 값 콜렉션으로, 삽입 순서를 기억한다
하나의 Set 내 값은 중복 없이 유일하다
값이 중복 없이 유일하다는 특징으로, 활용성이 굉장히 높아보인다
해시테이블을 사용하는 Set의 경우에, has 메서드의 시간복잡도가 O(1) 이고
배열의 includes 메소드는 선형탐색으로 O(N) 이다
따라서 존재유무 및 중복 제거를 확인한다면, Set 사용을 고려할 수 있다
또한 다음과 같이 쉽게 배열과 변환할 수 있다
const myArr = [1, 2, 3];
const mySet = new Set(myArr);
console.log([...mySet]); // [1, 2, 3]
2. Map & Set 메소드
- set(key, value) :: Map / add(key) :: Set
- get(key)
- delete(key)
- has(key)
- clear()
- size
- keys()
- values()
- entries()
- ...등
아래는 Map 객체와 배열 객체의 관계를 나타낸 예시 코드이다
const kvArray = [['key1', 'value1'], ['key2', 'value2']]
const myMap = new Map(kvArray)
myMap.get('key1') // "value1"
아래는 Set 객체로 반복문을 돌리는 예시 코드이다
// set 내 항목에 대해 반복
// 순서대로 항목을 (콘솔에) 기록: 1, "some text", {"a": 1, "b": 2}
for (let item of mySet) console.log(item);
// 순서대로 항목을 기록: 1, "some text", {"a": 1, "b": 2}
// (여기서 key와 value는 같음)
for (let [key, value] of mySet.entries()) console.log(key);
// 차집합은 다음으로 흉내낼 수 있음
const difference = new Set([...set1].filter(x => !set2.has(x)));
3. Map & Set 활용 문제
다음 문제는 시간초과를 해결하기 위해, Map & Set 을 연습하기에 좋은 문제이다
중복을 없애야 하고, indexing 을 해야 한다
그 과정에서 indexOf 와 같은 배열 메소드를 사용하면 시간초과가 난다
반응형
'JS, TS' 카테고리의 다른 글
[JavaScript] How to implement Image Compression (5) | 2023.02.21 |
---|---|
[Javascript] call & apply 로 this 특정시키기 (0) | 2022.05.11 |
[Typescript] Enum, Union & intersection Type (3) | 2022.04.14 |
[Javascript] Event Delegation / 이벤트 위임 (0) | 2021.10.10 |
[Javascript] Promise와 Async / Await (0) | 2021.09.05 |