세트 Set
- 데이터의 집합체
- array와 다르게 인덱스가 없고 중복이 불가능
- 이미 있는 값을 추가해도 아무일도 일어나지 않음
const set = new Set([1, 2, 3]);
console.log(set);
console.log(set.size);
console.log(set.has(2));;
console.log(set.has(6));
set.forEach((item) => console.log(item));
for (const value of set.values()){
console.log(value);
}
set.add(6)
console.log(set);
set.add(6);
console.log(set);
set.delete(6)
console.log(set);
set.clear();
console.log(set);
const obj1 = { name: '🍎', price: 8 };
const obj2 = { name: '🍌', price: 5 };
const objs = new Set([obj1, obj2]);
console.log(objs);
obj1.price= 10;
objs.add(obj1)
console.log(objs);
const obj3 = {name: '🍌', price:5}
objs.add(obj3);
console.log(objs);
obj3.price = 8;
console.log(objs);
맵 Map
- 키와 값으로 이루어진 자료구조, 객체와 유사함
- [key, value]
- key 중복 불가능 : 하나의 key에 하나의 value만
const map = new Map([
['key1', '🍎'],
['key2', '🍌'],
]);
console.log(map);
console.log(map.size);
console.log(map.has('key1'));
console.log(map.has('key6'));
map.forEach((value, key)=> console.log(key, value));
console.log(map.keys());
console.log(map.values());
console.log(map.entries());
console.log(map.get('key1'));
console.log(map.get('key4'));
map.set('key3','🥝')
console.log(map);
map.delete('key3')
console.log(map);
map.clear();
console.log(map);
오브젝트와의 큰 차이점
- 구조상으로는 확인할 수 없지만 사용할 수 있는 함수에 차이점이 있다.
- 객체에서는 동적으로 접근 가능하나 맵은 불가능
const key = {name : 'milk', price:10};
const milk = {name : 'milk', price:10, description:'맛있는우유'};
const obj = {
[key]: milk,
}
console.log(obj);
const map2 = new Map([[key, milk]]);
console.log(map2);
console.log(obj[key]);
console.log(map2[key]);
console.log(map2.get(key));
심볼 Symbol
onst map =new Map();
const key1 = Symbol('key');
const key2 = Symbol('key');
map.set(key1, 'hello')
console.log(map.get(key2));
console.log(key1===key2);
- 동일한 이름으로 하나의 키를 사용하고 싶다면, Symbol.for
- 전역 심벌 레지스트리 (Global Symbol Registry)
const k1 = Symbol.for('key');
const k2 = Symbol.for('key');
console.log(k1===k2);
console.log(Symbol.keyFor(k1));
console.log(Symbol.keyFor(key1));
const obj = {[k1]:'hello',[Symbol('key')]:1};
console.log(obj);
console.log(obj[k1]);
console.log(obj[Symbol('key')]);