[F-Lab 모각코 챌린지 - 42일차] - Map

Big One·2023년 6월 21일
0

F-Lab

목록 보기
16/69

Map 이란?

Map은 Object 모델에서 파생된 객체이다. 키-값 의 형태를 가지고 삽입 순서를 기억한다. 모든 값(객체 및 원시 값 모두)은 키 또는 값으로 사용될 수 있다.

음 .. Map이 나온 이유?

Map은 {} 일반 객체와 굉장히 유사한데 {} 일반객체의 자유도가 굉장히 높기때문에 사람마다 활용하는 방식은 정말 다양하다. 그래서 코드를 봤을 때 이 사람이 어떤 의도로 객체를 사용했는지 알아내기 쉽지 않다. 그래서 나온게 Map이다? 맞나? ㅋㅋ

설명

Map 객체는 키-값 으로 이루어진다 했는데 키는 오직 하나만 존재한다. → Map 집합의 유일성

반복문을 사용할 때 기존 {} 은 for..in 을 많이 사용하였는데 Map 객체는 for..of를 사용하면 된다. 각 반복에 대해 [key, value] 형태로 반복이 가능하다.

이해 안가는 점

Map의 명세는 "평균적으로 집합 내 요소의 수에 따라 하위 선형인 접근 시간을 제공하는" 맵을 구현해야 한다고 기술되어 있습니다. 따라서 복잡성이 O(N)보다 더 나은 경우 내부적으로 해시 테이블(O(1) 룩업), 검색 트리(O(log(N)) 룩업) 또는 기타 데이터 구조로 표현될 수 있습니다. - 출처 mdn

객체 vs 맵

Map이 없었기에 대체품으로 객체를 사용해왔던 것이다. 차이점을 알아보장

  1. 순회
    1. 맵: 순회 가능(iterable) 하기 때문에 직접 반복할 수 있다.
    2. 객체: 순회 불가 Object.keys or Object.entries 를 사용하거나 for..in 을 사용했음
  2. 성능
    1. 맵: 키-값 쌍의 빈번한 추가 및 제거 상황에서는 성능이 좀 더 좋다.
    2. 객체: 키-값 쌍의 빈번한 추가 및 제거 상황에 최적화 되어있지 않다.
  3. 크기
    1. 맵: size 사용하면 나온다.
    2. 수동으로 결정해야함.
  4. 키 순서
    1. 맵: 항목을 삽입한 순서대로 키, 값을 반복한다. 한마디로 삽입 순서로 정렬되어있음
    2. 키는 정렬되어있지만 항상 그런건 아님 순서보장 x
  5. 키 유형
    1. 맵: 모든 값이 키로 설정할 수 있음.
    2. 객체: String 또는 Symbol만 가능

객체 속성 설정

와 이거 중요한듯 ㅋㅎ {} 객체처럼 그냥 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
profile
이번생은 개발자

0개의 댓글