λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
JS

[JS] : Map

by κΆŒμŠΎν–„ 2023. 7. 21.

Map?

λ°°μ—΄μ—μ„œ μ‚¬μš©ν•˜λŠ” mapλ©”μ„œλ“œκ°€ μ•„λ‹Œ JS의 "자료ꡬ쑰" 쀑 ν•˜λ‚˜μΈ map에 λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λ‹€.

맡을 μ•ŒκΈ°μ‰½κ²Œ μ„€λͺ…ν•˜μžλ©΄ "객체"λΌλŠ” ν‚€μ›Œλ“œλ‘œ μ„€λͺ…이 κ°€λŠ₯ν•œ 것 κ°™λ‹€.
λ‹€λ§Œ,
기쑴의 객체보닀 λ²•μš©μ„±μ΄ 넓은 녀석이라고 μƒκ°ν•˜κ³  μžˆλ‹€.

λ²”μš©μ„±μ˜ 차이λ₯Ό 예둜 λ“€μžλ©΄,

객체가 κ°€μ§€λŠ” "key" κ°’μ—λŠ” λ¬Έμžμ—΄ λ˜λŠ” μ‹¬λ³Όνƒ€μž…μ΄ μžλ¦¬ν•  수 μžˆμœΌλ‚˜,

Map이 κ°€μ§€λŠ” "key" κ°’μ—λŠ” ν˜•μ‹μ— μ œν•œμ΄ 없을 μ •λ„λ‘œ λ‹€μ–‘ν•œ 데이터 νƒ€μž…μ΄ μžλ¦¬ν•  수 μžˆλ‹€κ³  ν•œλ‹€.
λ˜ν•œ, μˆœμ„œκ°€ 보μž₯λœλ‹€.

 

Map 의 μ‚¬μš© λͺ©μ 

κ³„μ†ν•΄μ„œ μƒˆλ‘œμš΄ 자료ꡬ쑰 ν˜•νƒœκ°€ λ‚˜μ˜€λŠ” μ΄μœ λŠ” 기쑴의 κ²ƒμœΌλ‘œ ν‘œν˜„ν•˜λŠ”λ° μ œν•œμ΄ μƒκΈ΄λ‹€κ±°λ‚˜ 보닀 효율적이고 λΉ λ₯΄κ²Œ 일처리λ₯Ό ν•˜κΈ° μœ„ν•¨μ΄λΌκ³  μƒκ°ν•œλ‹€.

μš°λ¦¬κ°€ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 맀일 μƒˆλ‘œμš΄ μ½”λ“œλ₯Ό μ»€λ°‹ν•˜λŠ” 것과 같이 보닀 더 λ°œμ „μ‹œν‚€κ³ μž λ‚˜μ˜¨ 녀석쀑에 ν•˜λ‚˜μ΄μ§€ μ•Šμ„κΉŒ μ‹Άλ‹€.

기쑴의 객체보닀 더 λ‹€μ–‘ν•œ μš©λ„λ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€κ³  ν•˜λ‹ˆ μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”μ§€ μ•„λž˜μ—μ„œ μ•Œμ•„λ³΄μž.

 

ν˜•νƒœ

Key - Value

key μ—λŠ” μ–΄λ– ν•œ μœ ν˜•μ˜ 데이터 νƒ€μž…μ΄λΌλ„ λ“€μ–΄μ˜¬ 수 있으며,

κ·Έ μ΄μœ λŠ”, map은 key의 μ •λ ¬μˆœμ„œλŒ€λ‘œ μ €μž₯이 되기 λ•Œλ¬Έμ΄λΌκ³  ν•œλ‹€.

 

Map 생성

const myMap = new Map();

 

Map 생성 확인

console.log(myMap);

// 좜λ ₯κ°’ : Map(0) {}

가끔 console.log둜 μ—¬λŸ¬κ°€μ§€λ₯Ό ν™•μΈν•˜λ‹€ 보면 μ•„λž˜μ™€ 같은 ν˜•μ‹μ˜ 좜λ ₯값듀을 λ§ˆμ£ΌμΉœλ‹€.

[Function (anonymous)]

Map 을 μƒμ„±ν•˜κ³  console.log()둜 μƒμ„±ν•œ map을 ν™•μΈν•˜μž,
Map(0) {} λΌλŠ” μ²˜μŒλ³΄λŠ” 녀석이 좜λ ₯λ˜μ„œ μ‹ κΈ°ν–ˆλ‹€.

ν™•μ‹€νžˆ λ‚΄κ°€ μ—¬νƒœ ν”„λ‘œκ·Έλž˜λ°ν•œ μ½”λ“œμ€‘μ—λŠ” Mapμ΄λΌλŠ” 객체가 μ—†μ—ˆλ‚˜ 보닀.

 

좜λ ₯ κ°’ 해석

Map(0) {}

JS의 Mapμ΄λΌλŠ” 객체에 μ–΄λ–€ 데이터도 λ‹΄κ²¨μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 0 이라고 ν‘œμ‹œκ°€ 된 것이닀.
{}μ•ˆμ—λŠ” Map에 μ €μž₯λ˜μ–΄ μžˆλŠ” key-value pairκ°€ λ“€μ–΄κ°€κ²Œ λœλ‹€.

 

Map.set(key, value)

Map 객체에 데이터 μ €μž₯은 set()λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

set의 ()μ•ˆμ—λŠ” μ €μž₯ν•  λ°μ΄ν„°μ˜ key와 valueλ₯Ό λ„£μ–΄μ£Όλ©΄ λœλ‹€.

 

μ˜ˆμ‹œ

myMap.set('one', 1);
myMap.set('two', 2);
myMap.set('three', 3);

 

좜λ ₯ κ°’

console.log(myMap);

// Map(3) { 'one' => 1, 'two' => 2, 'three' => 3 }

key 와 value μ‚¬μ΄μ˜ => λŠ” key와 value λ₯Ό λ§€ν•‘ν•˜λŠ” "기호"라고 μƒκ°ν•˜λ©΄ λœλ‹€.

"one"μ΄λΌλŠ” key값이 1μ΄λΌλŠ” valueκ°’κ³Ό ν•˜λ‚˜μ˜ μŒμ„ 이루고 μžˆλ‹€λŠ” 뜻으둜 ν•΄μ„ν•œλ‹€.

Map(3)의 "3"은 ν˜„μž¬ Map κ°μ²΄μ•ˆμ— 3개의 key-value pairκ°€ λ“€μ–΄μžˆλ‹€λŠ” λœ»μ΄λ‹€.

 

Map.get(key)

mapμ—μ„œ μ›ν•˜λŠ” 데이터λ₯Ό μ‘°νšŒν•˜κ³ μž ν• λ•ŒλŠ” get()λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ³  ()μ•ˆμ—λŠ” ν•΄λ‹Ή κ°’μ˜ key값을 λ¬Έμžμ—΄ ν˜•νƒœλ‘œ λ„£μ–΄μ€€λ‹€.

 

μ˜ˆμ‹œ

// get 였λ₯˜ μ½”λ“œ
console.log(myMap.get(one));

// ReferenceError: one is not defined

μ‘°νšŒν•  λ°μ΄ν„°μ˜ keyλŠ” 항상 "λ¬Έμžμ—΄"둜 써쀀닀.

// get 정상 μ½”λ“œ

console.log(myMap.get('one'));

// 1

κ΄„ν˜Έμ•ˆμ— key값을 λ¬Έμžμ—΄λ‘œ μ‚¬μš©ν•˜κ²Œ 되면, μ •μƒμ μœΌλ‘œ "one"이 κ°€μ§€λŠ” value값인 1이 좜λ ₯λ˜λŠ”κ±Έ 확인할 수 μžˆλ‹€.

 

size()

map이 κ°€μ§€λŠ” key-value pair의 크기=길이λ₯Ό 확인할 수 μžˆλŠ” λ©”μ„œλ“œμ΄λ‹€.

 

μ˜ˆμ‹œ

console.log(myMap.size);

 

좜λ ₯ κ°’

3

 

has(key)

map 이 κ°€μ§€κ³  μžˆλŠ” 데이터인지 μ‘΄μž¬μ—¬λΆ€λ₯Ό ν™•μΈν•΄μ£ΌλŠ” λ©”μ„œλ“œμ΄λ‹€.

 

μ˜ˆμ‹œ

// has 였λ₯˜ μ½”λ“œ
console.log(myMap.has(three));

ReferenceError: three is not defined
// has 정상 μ½”λ“œ

console.log(myMap.has('three'));

 

좜λ ₯ κ°’

좜λ ₯은 true or false인 Boolean 값이 좜λ ₯λœλ‹€.

true

μ—­μ‹œ 킀값을 μ μ–΄μ£ΌλŠ” κ΄„ν˜Έμ•ˆμ—λŠ” "λ¬Έμžμ—΄" ν˜•νƒœλ‘œ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

 

delete(key)

map이 κ°€μ§€κ³ μžˆλŠ” key-value pairλ₯Ό μ‚­μ œν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€.

 

μ˜ˆμ‹œ

console.log(myMap.delete('three'));

 

좜λ ₯ κ°’

true

delete λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄λ³΄λ‹ˆ Boolean 값이 λ‚˜μ˜¨λ‹€.

그럼 ν˜„μž¬ map 객체가 κ°–κ³ μžˆμ§€ μ•Šμ€ 데이터λ₯Ό μ‚­μ œν•˜λ €κ³  ν•˜λ©΄ 어떀값이 λ‚˜μ˜¬μ§€ μ‹€ν—˜ν•΄λ΄€λ‹€.

console.log(myMap.delete('four'));

// 좜λ ₯ κ°’ : false

μ˜ˆμƒν•œλŒ€λ‘œ false κ°€ 좜λ ₯λ˜λŠ” κ±Έ 확인할 μˆ˜μžˆλ‹€.

 

delete 적용 확인

const myMap = new Map();

// 데이터 μ €μž₯
myMap.set('one', 1);
myMap.set('two', 2);
myMap.set('three', 3);

// 데이터 μ‚­μ œ
console.log(myMap.delete('three')); // true

// μ‚­μ œ ν›„μ˜ myMap 체크
console.log(myMap); // Map(2) { 'one' => 1, 'two' => 2 }

잘 μ μš©λœκ²ƒμ„ 확인 κ°€λŠ₯ ν•˜λ‹€.

 

clear()

map 객체가 κ°–κ³ μžˆλŠ” λͺ¨λ“  데이터λ₯Ό μ‚­μ œν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€.

 

μ˜ˆμ‹œ

myMap.clear();

console.log 둜 확인이 κ°€λŠ₯ν•œμ§€ ν…ŒμŠ€νŠΈ ν•΄λ΄€λŠ”λ° undefinedκ°€ λ‚˜μ˜¨λ‹€.

κ·Έλž˜μ„œ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ³  μ•„λž˜μ— console.log(myMap)으둜 데이터가 μ§€μ›Œμ‘ŒλŠ”μ§€ 확인해 λ³΄μ•˜λ‹€.

 

좜λ ₯ κ°’

console.log(myMap);

// 좜λ ₯ κ°’ : Map(0) {}

clear λ©”μ„œλ“œκ°€ 잘 μ μš©λœκ²ƒμ„ 확인할 수 μžˆλ‹€.

 

λŠλ‚€ 점

λ‚˜λŠ” 였늘 Map κ°μ²΄λΌλŠ”κ²ƒμ„ 처음 μ ‘ν•΄λ΄€λ‹€.

map은 κ·Έμ € λ°°μ—΄ 쑰건 반볡문이라고만 μƒκ°ν–ˆμ—ˆλŠ”λ°, μ΄λ ‡κ²Œ μƒˆλ‘œμš΄ 객체인 JS의 Map을 μ•Œκ²Œλ˜λ‹ˆ μž¬λ°Œμ—ˆλ‹€.

λ‹€μŒμ—λŠ” setμ΄λΌλŠ” μžλ£Œκ΅¬μ‘°μ— λŒ€ν•΄μ„œλ„ 곡뢀해볼 생각이닀.

 

#JS #자료ꡬ쑰

#map

'JS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JS] : Iterator ( for ... of )  (0) 2023.07.23
[JS] : Set  (0) 2023.07.22
[JavaScript] : post.destroy() / await Posts.destroy({where : {postId}})  (0) 2023.07.14
[JavaScript] : tirm()  (0) 2023.07.14
[JavaScript] : TypeError: Converting circular structure to JSON 였λ₯˜ν•΄κ²°  (0) 2023.06.14