[JS] map과 set

학미새🐥·2023년 5월 5일
0

모던자스 정리

  • 키가 있는 데이터를 저장하는 자료 구조
  • 키로 다양한 자료형이 올 수 있다. (키에 객체가 올 수도 있다)
  • 객체와 달리 키를 문자형으로 강제변환 하지 않는다.

∙ new Map() : 맵을 만듭니다.
∙ map.set(key, value) : key를 이용해 value를 저장합니다.
∙ map.get(key) : key에 해당하는 값을 반환합니다. key가 존재하지 않으면 - undefined를 반환합니다.
∙ map.has(key) : key가 존재하면 true, 존재하지 않으면 false를 반환합니다.
∙ map.delete(key) : key에 해당하는 값을 삭제합니다.
∙ map.clear() : 맵 안의 모든 요소를 제거합니다.
∙ map.size : 요소의 개수를 반환합니다.

let john = { name: "John" };

let visitsCountObj = {}; // 객체를 하나 만듭니다.

visitsCountObj[john] = 123; // 객체(john)를 키로 해서 객체에 값(123)을 저장해봅시다.

// 원하는 값(123)을 얻으려면 아래와 같이 키가 들어갈 자리에 `object Object`를 써줘야합니다.
alert( visitsCountObj["[object Object]"] ); // 123

맵의 요소에 반복 작업

맵의 각 요소에 반복 작업이 가능하다.

∙ map.keys() : 각 요소의 키를 모은 반복 가능한(iterable, 이터러블) 객체를 반환합니다.
∙ map.values() : 각 요소의 값을 모은 이터러블 객체를 반환합니다.
∙ map.entries() : 요소의 [키, 값]을 한 쌍으로 하는 이터러블 객체를 반환합니다. 이 이터러블 객체는 for..of반복문의 기초로 쓰입니다.

let recipeMap = new Map([
  ['cucumber', 500],
  ['tomatoes', 350],
  ['onion',    50]
]);

// 키(vegetable)를 대상으로 순회합니다.
for (let vegetable of recipeMap.keys()) {
  alert(vegetable); // cucumber, tomatoes, onion
}

// 값(amount)을 대상으로 순회합니다.
for (let amount of recipeMap.values()) {
  alert(amount); // 500, 350, 50
}

// [키, 값] 쌍을 대상으로 순회합니다.
for (let entry of recipeMap) { // recipeMap.entries()와 동일합니다.
  alert(entry); // cucumber,500 ...
}
  • 맵은 배열과 같이 forEach도 가능하다.

Object.entries(obj)

이를 통해 객체를 맵으로 변경할 수 있다.

// 각 요소가 [키, 값] 쌍인 배열
let map = new Map([
  ['1',  'str1'],
  [1,    'num1'],
  [true, 'bool1']
]);

alert( map.get('1') ); // str1
  • 객체의 키-값 쌍을 요소([key, value])로 가지는 배열을 반환

Object.fromEntries(map)

맵을 객체로 바꾸는 방법

  • 각 요소가 [키, 값] 쌍인 배열을 객체로 바꿔줌
let prices = Object.fromEntries([
  ['banana', 1],
  ['orange', 2],
  ['meat', 4]
]);

// now prices = { banana: 1, orange: 2, meat: 4 }

alert(prices.orange); // 2

  • 키가 없는 값 저장
  • 중복이 불가능한 컬렉션
  • 주요 메서드

    ∙ new Set(iterable) : 셋을 만듭니다. 이터러블 객체를 전달받으면(대개 배열을 전달받음) 그 안의 값을 복사해 셋에 넣어줍니다.
    ∙ set.add(value) : 값을 추가하고 셋 자신을 반환합니다.
    ∙ set.delete(value) : 값을 제거합니다. 호출 시점에 셋 내에 값이 있어서 제거에 성공하면 true, 아니면 false를 반환합니다.
    ∙ set.has(value) : 셋 내에 값이 존재하면 true, 아니면 false를 반환합니다.
    ∙ set.clear() : 셋을 비웁니다.
    ∙ set.size : 셋에 몇 개의 값이 있는지 세줍니다.

셋에 반복작업 하기

  • for..offorEach가 가능하다.
  • 반복작업을 위한 메서드

    ∙ set.keys() : 셋 내의 모든 값을 포함하는 이터러블 객체를 반환합니다.
    ∙ set.values() : set.keys와 동일한 작업을 합니다. 맵과의 호환성을 위해 만들어진 메서드입니다.
    ∙ set.entries() : 셋 내의 각 값을 이용해 만든 [value, value] 배열을 포함하는 이터러블 객체를 반환합니다. 맵과의 호환성을 위해 만들어졌습니다.

profile
뭐든 다해보려는 공대생입니다

0개의 댓글