ES6에 새로 추가된 Map 타입의 기본 문법과 특징을 알아보자.
Map은 key
와value
가 [key,value] 형식으로 이루어진 리스트
ㅡ Map 객체 생성은 다음 new Map()
으로 생성하고 Map.set()
으로 요소를 추가할 수 있다.
var myMap = new Map();
// 요소 추가
myMap.set('bar','foo');
myMap.set(1,'foobar');
//요소 업데이트
myMap.set('bar','baz')
let map = new Map();
map.set('1','str1'); // a string key
map.set(1, 'num1'); // a number key
console.log(map.get(1)); // 'num1'
console.log(map.get('1')) // 'str1'
console.log(map.has('2')) // false
console.log(map.size) // 가지고 있는 요소 수 반환 : 2
/* Map 객체 사용하기 */
let myMap = new Map();
let keyString = 123
let keyObj = {};
let keyFunc = function() {};
// 값 설정
myMap.set(keyString,'string');
myMap.set(keyObj,'obj');
myMap.set(keyFunc,123123);
myMap.get(keyString) // "'문자열'과 관련된 값"
myMap.get(keyObj) // "keyObj와 관련된 값"
myMap.get(keyFunc) // "keyFunc와 관련된 값"
myMap.size //3
//문자열과 관련된 값
myMap.get(123)
// 어떻게 'string'이 나오는가? keyString === '문자열'이기 때문에
console.log('obj:',myMap.get({}));
let myCpp = new Map();
myCpp.set(NaN,'NaN 값도 추가가 됩니다!');
myCpp.get(NaN); // 'NaN 값도 추가가 됩니다!'
// Map 은 for..of 반복문을 사용해 순회할 수 있습니다.
let myMap = new Map();
myMap.set(0,'z');
myMap.set(1,'x');
for(let [key,value] of myMap) {
console.log(`${key} = ${value}`)
} //'0 = z', '1 = x'
for(let[key,value] of myMap.entries()) {
console.log(`${key} = ${value}`)
}//'0 = z', '1 = x'
// key값 가져오기 .keys()
for(let key of myMap.keys()) {
console.log(`key : ${key}`)
}// 0,1
//value 값 가져오기 .values()
for(let value of myMap.values()) {
console.log(`value : ${value}`)
}//z,x
//forEach()로 Map 순회하기
myMap.forEach(function(value,key){
console.log(`${key} : ${value}`)
}) //
// 객체에서 맵 만들기 Object.entries()
let obj = {
name : 'john',
age : 30
};
let map = new Map(Object.entries(obj));
console.log(map.get('age'));
console.log(map)
// Object.fromEntries
let prices = Object.fromEntries([['banan',1],['orange',2],['meat',4]])
// Array 객체와의 관계
let kvArray = [['key1','value1'],['key2','value2']];
let myMap = new Map(kvArray);
myMap.get('key1'); //returns 'value1'
[...myMap]; //
//Array.from() : 해당 전체 복사
Array.from(myMap)
Array.from(myMap.values());
//비어 있는 새로운 set 생성
let setA = new Set();
// 새로운 set 을 만들고 인자로 전달된 iterable로 인자를 채운다.
let setB = new Set().add("a").add("b");
setB; // {'a','b'}
for(let user of setB.keys()) {
setB.add(user)
}
setB
// Set 반복
let set = new Set(['oranges','apples','banana']);
for(let value of set) {
console.log(value)
}
// forEach
set.forEach((value,valueAgain,set)=>{
console.log('v :',value);
console.log('VA :' , valueAgain)
console.log('Set :',set)
})