Map ( )
- Map ( ) 은 key-value 쌍으로 이루어진 컬렉션, 객체와 유사함
- key를 사용하여 value를 get, set 할 수 있다
- key 중복 불가능 : 하나의 key에 하나의 value만
const map = new Map([
['key1','hello'],
['key2','world'],
]);
console.log(map)
💡 map의 길이 알기
console.log(map.size);
💡 key-value 추가
set(key,value)
- 반환값 : 맵의 참조 주소
map.set('key3', 'JS');
console.log(map)
💡 value 얻기
get(key)
- 반환값 : 키가 있으면 값을 반환, 키가 없으면 undefined 반환
console.log(map.get('key1'));
console.log(map.get('key2'));
console.log(map.get('key4'));
💡 key가 있는지 확인
has(key)
- 반환값 : 키가 있으면 true, 없으면 false
console.log(map.has('key1'));
console.log(map.has('key6'));
💡 key-value 삭제
delete(key)
- 반환값 : 삭제 성공하면 true, 실패하면 false
console.log(map.delete('key1'));
console.log(map.delete('key7'));
💡 key-value 전체 삭제
clear()
- 반환값 : undefined 반환
console.log(map.clear());
console.log(map);
key-value 순회
- 반환값 : 새로운 Map iterator 객체
forEach()
: 파라메터로 키-값을 각각 받아 순환
entries()
: 키-값 쌍으로 순환
keys()
: 키만 순환
values()
: 값만 순환
map.forEach((value, key) => console.log(key, value));
for(let [key,value] of map.entries()){
console.log(key+' '+value);
}
for(let key of map.keys()){
console.log(key);
}
for(let value of map.values()){
console.log(value);
}
Map과 Obj의 결정적인 큰 차이점
key 값
- Map 어떠한 데이터 값도 key로 가질 수 있다
- Obj String, Symbol이어야 한다
key의 순서
- Map 삽입한 순서대로 key 정렬, 이터레이터 할 경우 순서대로 나온다.
- Obj key들이 순서대로 정렬되긴하지만, 항상 순서가 보장되는 것은 아니다.
Set ( )
- value로 이루어진 집합
- Array와 다르게 Set은 같은 value를 포함할 수 없음
- 따라서 Set에 이미 존재하는 값을 추가해도 아무일이 일어나지 않음
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);
Symbol ( )
- key의 이름이 똑같아도 유일한 키를 생성할 수 있음
const map = new Map();
const key1 = Symbol('SSO');
const key2 = Symbol('SSO');
map.set(key1, 'Hello');
console.log(map.get(key2));
console.log(key1 === key2);
💡 동일한 이름으로 하나의 key 사용하기
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')]);