Map은 Object 모델에서 파생된 객체이다. 키-값 의 형태를 가지고 삽입 순서를 기억한다. 모든 값(객체 및 원시 값 모두)은 키 또는 값으로 사용될 수 있다.
Map은 {} 일반 객체와 굉장히 유사한데 {} 일반객체의 자유도가 굉장히 높기때문에 사람마다 활용하는 방식은 정말 다양하다. 그래서 코드를 봤을 때 이 사람이 어떤 의도로 객체를 사용했는지 알아내기 쉽지 않다. 그래서 나온게 Map이다? 맞나? ㅋㅋ
Map 객체는 키-값 으로 이루어진다 했는데 키는 오직 하나만 존재한다. → Map 집합의 유일성
반복문을 사용할 때 기존 {} 은 for..in 을 많이 사용하였는데 Map 객체는 for..of를 사용하면 된다. 각 반복에 대해 [key, value] 형태로 반복이 가능하다.
Map
의 명세는 "평균적으로 집합 내 요소의 수에 따라 하위 선형인 접근 시간을 제공하는" 맵을 구현해야 한다고 기술되어 있습니다. 따라서 복잡성이 O(N)보다 더 나은 경우 내부적으로 해시 테이블(O(1) 룩업), 검색 트리(O(log(N)) 룩업) 또는 기타 데이터 구조로 표현될 수 있습니다. - 출처 mdn
Map이 없었기에 대체품으로 객체를 사용해왔던 것이다. 차이점을 알아보장
와 이거 중요한듯 ㅋㅎ {} 객체처럼 그냥 obj[’name’] = ‘value’; 이렇게 사용하면 안됨 . 저장은 되지만 찾을 때 내부 기능이랑 상호작용이 안됨
const wrongMap = new Map();
wrongMap['bla'] = 'blaa';
wrongMap['bla2'] = 'blaaa2';
console.log(wrongMap); // Map { bla: 'blaa', bla2: 'blaaa2' }
wrongMap.has('bla') // false
wrongMap.delete('bla') // false
console.log(wrongMap) // Map { bla: 'blaa', bla2: 'blaaa2' }
set(key, value )메서드를 사용하자!!!
꿀팁 맵은 배열과 병합할 수 있고 키 유일성 유지한 채로 맵끼리 병합할수도 있다.
const first = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three'],
]);
const second = new Map([
[1, 'uno'],
[2, 'dos'],
]);
// 맵을 배열로 병합하기. 중복된 키가 있다면 마지막에 병합된 맵의 키에 해당하는 값이 설정됩니다.
const merged = new Map([...first, ...second, [1, 'eins']]);
console.log(merged.get(1)); // eins
console.log(merged.get(2)); // dos
console.log(merged.get(3)); // three