치돈포에버 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.