Recent Posts
Recent Comments
Link
Today
Total
05-20 08:40
관리 메뉴

채린씨의 티스토리

[JavaScript] 36. Map 본문

자료구조, 알고리즘/JavaScript 기초 문법

[JavaScript] 36. Map

채린씨 2022. 3. 14. 00:59

* Map

- key-value 형태의 자료형을 저장할 수 있는 Collection

- Object와 달리 다양한 자료형의 key를 허용함

- Object와 달리 값의 추가/삭제 시 메서드를 이용해야 함

- 생성: new Map()

 

* 요소 추가/삭제, 크기

- 요소 추가: Map.set(key, value)

- 요소 접근: Map.get(key)

- 요소 삭제:  Map.delete(key)

- 요소 전체 삭제: Map.clear()

- 요소 개수 확인: Map.size

- map.set 호출 시 map이 반환되므로 체이닝(chaining) 가능

// map이라는 새로운 Map 생성
let map = new Map();

// set을 이용한 요소 추가 (다양한 자료형의 key 허용)
map.set("name", "John"); // string key
map.set(123, 456); // number key
map.set(true, "bool_type"); // boolean key
console.log(map); // output: Map(3) { 'name' => 'John', 123 => 456, true => 'bool_type' }

// size를 이용한 크기 확인
console.log(map.size); // output: 3

// get을 이용한 요소 접근
console.log(map.get("name")); // output: John
console.log(map.get(123)); // output: 456
console.log(map.get(true)); // output: bool_type

// delete를 이용한 요소 삭제
map.delete("name");
console.log(map); // output: Map(2) { 123 => 456, true => 'bool_type' }

// clear를 이용한 요소 전체 삭제
map.clear();
console.log(map); // output: Map(0) {}

// set 호출 시 map이 반환됨
console.log(map.set("name", "Alice")); // output: Map(1) { 'name' => 'Alice' }

// set 호출 시 map이 반환되는 것을 이용한 체이닝(chaining)가능
map.set(456, 789).set(false, "bool_type");
console.log(map); // output: Map(3) { 'name' => 'Alice', 456 => 789, false => 'bool_type' }

 

* Key 존재 여부 확인

- Key 존재 여부 확인: Map.has(key)

// map 생성과 초기화를 한번에
let recipe_juice = new Map([
  ["strawberry", 50],
  ["banana", 100],
  ["ice", 150],
]);

console.log(recipe_juice.has("strawberry")); // output: true
console.log(recipe_juice.has("bluebery")); // output: false

 

* Map 반복문

- Collection 객체인 Map이 가지고 있는 iterator 속성을 이용하여 for ... of 구문으로 반복문 수행 가능

- 모든 key값 반환: Map.keys()

- 모든 value값 반환: Map.values()

- 모든 요소 반환: Map.entries()

let recipe_juice = new Map([
  ["strawberry", 50],
  ["banana", 100],
  ["ice", 150],
]);

console.log(recipe_juice);
// output: Map(3) { 'strawberry' => 50, 'banana' => 100, 'ice' => 150 }

// keys를 이용해 recipe_juice의 key값 확인
console.log(recipe_juice.keys());
// output: [Map Iterator] { 'strawberry', 'banana', 'ice' }]

// values를 이용해 recipe_juice의 value값 확인
console.log(recipe_juice.values());
// output: [Map Iterator] { 50, 100, 150 }

// recipe_juice의 key값에 차례로 접근
for (let item of recipe_juice.keys()) console.log(item);
// output: strawberry banana ice

// recipe_juice의 value값에 차례로 접근
for (let amount of recipe_juice.values()) console.log(amount);
// output: 50 100 150

// recipe_juice의 각 요소(key, value)에 차례로 접근
for (let entity of recipe_juice) console.log(entity);
// ouput: [ 'strawberry', 50 ] [ 'banana', 100 ] [ 'ice', 150 ]

// recipe_juice 모든 요소에 접근
console.log(recipe_juice.entries());
/* output: 
[Map Entries] {
  [ 'strawberry', 50 ],
  [ 'banana', 100 ],
  [ 'ice', 150 ]
} */

 

* Map  <-> Object 변환

- Map -> Object: Object.fromEntries(Map)

- Object -> Key, Value: Object.entries(Object)

- Key, Value -> Map: new Map(Key, Value)

// recipe_juice (Map)
let recipe_juice = new Map([
  ["strawberry", 50],
  ["banana", 100],
  ["ice", 150],
]);

// recipe_juice (Map) -> recipe_juice_obj (Object)
let recipe_juice_obj = Object.fromEntries(recipe_juice);
console.log(recipe_juice_obj);
// output: { strawberry: 50, banana: 100, ice: 150 }

// recipe_juice_obj (Object) -> recipe_juice_kv (Key, Value)
let recipe_juice_kv = Object.entries(recipe_juice_obj);
console.log(recipe_juice_kv);
// output: [ [ 'strawberry', 50 ], [ 'banana', 100 ], [ 'ice', 150 ] ]

// recipe_juice_kv (Key, Value) -> recipe_juice_map (Map)
let recipe_juice_map = new Map(recipe_juice_kv);
console.log(recipe_juice_map);
// output: Map(3) { 'strawberry' => 50, 'banana' => 100, 'ice' => 150 }

- Object의 Key값은 String과 Symbol type만 가능하다. 기억이 안 난다면..? https://cherish-my-codes.tistory.com/entry/8-%EA%B0%9D%EC%B2%B4%ED%83%80%EC%9E%85

 

8. 객체타입

* 객체(object) - 다수의 원시 자료형을 포함하거나 복잡한 개체(entity)를 표현할 수 있는 자료형 - Object() 혹은 중괄호({})를 이용해 생성 - 객체(object)의 개체(entity)는 key: value 형태로 존재하며, obj..

cherish-my-codes.tistory.com

- 만약 Map의 Key값이 String이 아닌데 Object로 변환한다면?

// recipe_juice (Map)
let map = new Map([[123, 456]]);

console.log(map);
// output: Map(1) { 123 => 456 }

// map (Map) -> map_obj (Object)
let map_obj = Object.fromEntries(map);
console.log(map_obj);
// output: { '123': 456 } (Key 123(Number)이 '123'(String)으로 바뀜!!!)

// map_obj (Object) -> map_kv (Key, Value)
let map_kv = Object.entries(map_obj);
console.log(map_kv);
// output: [ [ '123', 456 ] ]

// map_kv (Key, Value) -> map_map (Map)
let map_map = new Map(map_kv);
console.log(map_map);
// output: Map(1) { '123' => 456 }

 

 

 

 

'자료구조, 알고리즘 > JavaScript 기초 문법' 카테고리의 다른 글

[JavaScript] 38. Math  (0) 2022.03.14
[JavaScript] 37. Set  (0) 2022.03.14
[JavaScript] 35. Collection  (0) 2022.03.13
[JavaScript] 34. 생성자  (0) 2022.03.13
[JavaScript] 33. 그 외 고차함수  (1) 2022.03.13
Comments