map-set

Map

key와 valueλ₯Ό μ΄μš©ν•΄ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 자료ꡬ쑰

κ°μ²΄μ™€λŠ” λ‹€λ₯΄κ²Œ key에 λ‹€μ–‘ν•œ μžλ£Œν˜•μ„ ν—ˆμš©ν•œλ‹€

map의 value에 μ ‘κ·Όν• λ•Œ λŒ€κ΄„ν˜Έ[]둜 접근이 κ°€λŠ₯ν•˜λ‚˜ μ΄λŠ” 객체와 같은 취급을 ν•˜κΈ°μ— get,set을 이용

key둜 객체도 ν—ˆμš©ν•œλ‹€.

맡은 keyλ₯Ό λΉ„κ΅ν• λ•Œ ===이 μ•„λ‹Œ SameValueZeroλΌλŠ” μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ λ“±κ°€ μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ° λ•Œλ¬Έμ— NaN도 key둜 μ‚¬μš©κ°€λŠ₯ν•˜λ‹€

맡의 key둜 객체λ₯Ό μ‚¬μš©ν•˜κ³  객체λ₯Ό μ‚­μ œμ‹œμ— 가비지 컬렉터가 객체λ₯Ό μ‚­μ œν•˜μ§€ μ•ŠλŠ”λ‹€. (μ—¬μ „νžˆ 맡이 객체λ₯Ό μ°Έμ‘°ν•˜κ³  있기 λ•Œλ¬Έμ—)

μ£Όμš” λ©”μ„œλ“œμ™€ ν”„λ‘œνΌν‹°

  • new Map() : 맡 생성

  • map.set(key,value) : keyλ₯Ό μ΄μš©ν•΄ value μ €μž₯

  • map.get(key) : key의 value λ°˜ν™˜. keyκ°€ μ—†μœΌλ©΄ undefined

  • map.has(key) : keyκ°€ μ‘΄μž¬ν•˜λ©΄ true, μ—†μœΌλ©΄ false

  • map.delete(key) : key에 ν•΄λ‹Ήν•˜λŠ” value μ‚­μ œ

  • map.clear() : 맡 λͺ¨λ“  μš”μ†Œ μ§€μš°κΈ°

  • map.size : 맡의 μš”μ†Œ 개수 λ°˜ν™˜

  • map.keys() : key듀을 λͺ¨μ€ iterable객체λ₯Ό λ°˜ν™˜

  • map.values() : value듀을 λͺ¨μ€ iterable 객체λ₯Ό λ°˜ν™˜

  • map.entries() : [key,value]λ₯Ό μŒμœΌλ‘œν•˜λŠ” iterable객체λ₯Ό λ°˜ν™˜

    let recipeMap = new Map([
      ['cucumber', 500],
      ['tomatoes', 350],
      ['onion', 50],
    ]);
    
    for (let vegetable of recipeMap.keys()) {
      alert(vegetable); // cucumber, tomatoes, onion
    }
    
    for (let amount of recipeMap.values()) {
      alert(amount); // 500, 350, 50
    }
    
    alert(recipeMap.entries());
  • forEach() : λͺ¨λ“  μš”μ†Œμ— λŒ€ν•΄ λ°˜λ³΅μ‹€ν–‰

  • Object.entries : 객체λ₯Ό 맡으둜 λ°”κΎΈκΈ°

    let obj = {
      name: 'John',
      age: 30,
    };
    
    let map = new Map(Object.entries(obj));
    alert(map.get('name')); // John
  • Object.fromEntries : 맡을 객체둜 λ°”κΎΈκΈ°

    let map = new Map();
    map.set('banana', 1);
    map.set('orange', 2);
    map.set('meat', 4);
    
    let obj = Object.fromEntries(map.entries()); // obj = { banana: 1, orange: 2, meat: 4 }
    alert(obj.orange); // 2

WeekMap

μœ„ν¬λ§΅μ€ 일반 맡과 달리 ν‚€λ‘œμ“°μΈ 객체가 가비지 μ»¬λ ‰μ…˜μ˜ λŒ€μƒμ΄ λœλ‹€.

keyκ°€ λ°˜λ“œμ‹œ 객체이어야 ν•œλ‹€.

μ‚¬μš©κ°€λŠ₯ ν•¨μˆ˜

  • weakMap.get(key)

  • weakMap.set(key, value)

  • weakMap.delete(key)

  • weakMap.has(key)

μ‚¬μš© 예

  • 뢀가적인 데이터λ₯Ό μ €μž₯ν•  곳이 ν•„μš”ν• λ•Œ

    μ™ΈλΆ€ μ½”λ“œμ— μ†ν•œ 객체λ₯Ό 가지고 μž‘μ—…μ„ ν• λ•Œ, μ–΄λ–€ 객체에 데이터λ₯Ό μΆ”κ°€ν•΄μ€„λ•Œ (ꡳ이 μ™ΈλΆ€ μ½”λ“œμ— μ†ν•œ 객체λ₯Ό λ©”λͺ¨λ¦¬μ— 남길 ν•„μš”κ°€ μ—†λ‹€.)

  • 캐싱이 ν•„μš”ν• λ•Œ

    λ™μΌν•œ ν•¨μˆ˜λ₯Ό μ—¬λŸ¬λ²ˆ ν˜ΈμΆœν• λ•Œ (처음 싀행값을 μ—¬λŸ¬λ²ˆ μ‚¬μš©ν• λ•Œ) 캐싱을 μ΄μš©ν•˜λ©° μΊμ‹œμ— ν•„μš”μ—†μ–΄μ§„ ν•¨μˆ˜λ₯Ό μ‚­μ œν• λ•Œ WeekMap이 μœ μš©ν•˜λ‹€.

Set

쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” 값듀을 λͺ¨μ•„놓은 자료ꡬ쑰

μ£Όμš” λ©”μ„œλ“œ 및 ν”„λ‘œνΌν‹°

  • new Set(iterable) : iterable객체(λ°°μ—΄, 객체)을 μ „λ‹¬λ°›μœΌλ©΄ 값을 볡사해 셋을 λ§Œλ“€μ–΄μ€€λ‹€.

  • set.add(value) : valueλ₯Ό μΆ”κ°€ν•˜κ³  μ…‹ μžμ‹ μ„ λ°˜ν™˜

  • set.delete(value) : valueλ₯Ό μ œκ±°ν•˜κ³  μ œκ±°κ°€ μ„±κ³΅ν•˜λ©΄ true, μ•„λ‹ˆλ©΄ false λ°˜ν™˜

  • set.has(value) : μ…‹ 내에 값이 μ‘΄μž¬ν•˜λ©΄ true, μ•„λ‹ˆλ©΄ false

  • set.clear() : μ…‹ μ΄ˆκΈ°ν™”

  • set.size : μ…‹μ˜ μš”μ†Œ 개수

  • for...of / forEach : λ°˜λ³΅μž‘μ—… μˆ˜ν–‰

    let set = new Set(['oranges', 'apples', 'bananas']);
    
    for (let value of set) alert(value);
    
    set.forEach((value, valueAgain, set) => {
      alert(value);
    });

    mapκ³Ό set의 μƒν˜Έ λ³€ν™˜μ„ μ‰½κ²Œν•˜κΈ° μœ„ν•΄ forEach에 쓰인 인수λ₯Ό 2개 μ‚¬μš©ν•œλ‹€.

WeekSet

μœ„ν¬λ§΅μ²˜λŸΌ λ³΅μž‘ν•œ 데이터λ₯Ό μ €μž₯ν•˜μ§€ μ•Šκ³  예, μ•„λ‹ˆμ˜€μ²˜λŸΌ κ°„λ‹¨ν•œ 닡변을 μ–»λŠ” μš©λ„λ‘œ μ‚¬μš©

μ‚¬μš©κ°€λŠ₯ ν•¨μˆ˜

  • weakSet.get(key)

  • weakSet.set(key, value)

  • weakSet.delete(key)

  • weakSet.has(key)

μ‚¬μš© 예

  • 뢀가적인 데이터λ₯Ό μ €μž₯ν•  곳이 ν•„μš”ν• λ•Œ

    μ™ΈλΆ€ μ½”λ“œμ— μ†ν•œ 객체λ₯Ό 가지고 μž‘μ—…μ„ ν• λ•Œ, μ–΄λ–€ 객체에 데이터λ₯Ό μΆ”κ°€ν•΄μ€„λ•Œ (ꡳ이 μ™ΈλΆ€ μ½”λ“œμ— μ†ν•œ 객체λ₯Ό λ©”λͺ¨λ¦¬μ— 남길 ν•„μš”κ°€ μ—†λ‹€.)

  • 캐싱이 ν•„μš”ν• λ•Œ

    λ™μΌν•œ ν•¨μˆ˜λ₯Ό μ—¬λŸ¬λ²ˆ ν˜ΈμΆœν• λ•Œ (처음 싀행값을 μ—¬λŸ¬λ²ˆ μ‚¬μš©ν• λ•Œ) 캐싱을 μ΄μš©ν•˜λ©° μΊμ‹œμ— ν•„μš”μ—†μ–΄μ§„ ν•¨μˆ˜λ₯Ό μ‚­μ œν• λ•Œ WeekMap이 μœ μš©ν•˜λ‹€.

Last updated