개발/Javascript
Map, Set
치돈포에버
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을 사용할 만한 상황은?
+ 둘 차이점 감안해보면 알 수 있으려나