Map 과 Set

Jeon seong jin·2020년 5월 17일
0

JavaScript

목록 보기
11/11

ES6에 새로 추가된 Map 타입의 기본 문법과 특징을 알아보자.
Map은 keyvalue가 [key,value] 형식으로 이루어진 리스트

Map 생성

ㅡ Map 객체 생성은 다음 new Map()으로 생성하고 Map.set()으로 요소를 추가할 수 있다.

set() 사용예제

	var myMap = new Map();
	// 요소 추가
	myMap.set('bar','foo');
	myMap.set(1,'foobar');

	//요소 업데이트
	myMap.set('bar','baz')

Map 객체 예제

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 순회

// 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

Set()는 value 들로 이루어진 컬렉션('집합'이라고 생각하자)

  • Array 와는 다르게 Set은 같은 value를 두번 포함할 수 없음 따라서 Set에 이미 존재하는 값을 추가하려 하면 아무 일도 없다.
//비어 있는 새로운 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)
})
profile
-기록일지

0개의 댓글