ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Map, Set
    개발/Javascript 2022. 6. 6. 19:31

    *복습 자료라서 뻔한 내용은 생략

     

     

    Summary.

     

     

    1. Map은 ES 2015 때 추가된 새로운 자료구조 (*Object와 다른 점은 아래)

        + 삽입 순서대로 iteration 됨

        + String, Symbol 외에도 Key로 설정 가능

        + size 함수로 size 값 바로 구할 수 있음

        + Object처럼 default key가 있지 않음

    let sayings = new Map();
    sayings.set('dog', 'woof');
    sayings.set('cat', 'meow');
    sayings.set('elephant', 'toot');
    sayings.size; // 3
    sayings.get('dog'); // woof
    sayings.get('fox'); // undefined
    sayings.has('bird'); // false
    sayings.delete('dog');
    sayings.has('dog'); // false
    
    for (let [key, value] of sayings) {
      console.log(key + ' goes ' + value);
    }
    // "cat goes meow"
    // "elephant goes toot"
    
    sayings.clear();
    sayings.size; // 0

     

    2. Weak Map은 Key가 Weak Reference여서 GC 대상이고, Key List도 얻을 수 없는 자료구조

        + 쓰임새 (private information 저장용)

    const privates = new WeakMap();
    
    function Public() {
      const me = {
        // Private data goes here
      };
      privates.set(this, me);
    }
    
    Public.prototype.method = function () {
      const me = privates.get(this);
      // Do stuff with private data in `me`...
    };
    
    module.exports = Public;

     

    3. Set도 삽입 순서대로 iteration 가능

        + Array는 느린 splice 연산으로 요소를 지워야하는데 Set은 값을 기준으로 바로 지울 수 있고 NaN element도 iteration 가능

        + Weak Set은 iteration 안되고, Object 타입만 저장가능하고, DOM tracking, 등에 쓰임

    let mySet = new Set();
    mySet.add(1);
    mySet.add('some text');
    mySet.add('foo');
    
    mySet.has(1); // true
    mySet.delete('foo');
    mySet.size; // 2
    
    for (let item of mySet) console.log(item);
    // 1
    // "some text"
    // Array 간 변환
    Array.from(mySet);
    [...mySet2];
    
    mySet2 = new Set([1, 2, 3, 4]);

     

     

    Additional.

    1. (다음에) Object 대신 Map을 사용할 만한 상황은?

        + 둘 차이점 감안해보면 알 수 있으려나

     

     

    Reference.

    '개발 > Javascript' 카테고리의 다른 글

    Class  (0) 2022.06.06
    Object Model  (0) 2022.06.06
    Iterator / Generator / Iterable  (0) 2022.06.06
    Strict Mode  (0) 2022.06.06
    History (ECMAScript)  (0) 2022.06.06
Designed by Tistory.