map, set은 ES6에서 새로 도입한 자료구조
const mySet = new Set(); // {}
mySet.add(1); // {1}
mySet.add(2); //{1,2}
mySet.size; //2
mySet.delete(1); //{2}
mySet.has(2); //true
mySet.has(1); //false
myset.clear(); // {}
let arr = [...mySet]; //Spread 연산자를 이용해 array로 만들 수 있다.
//array중복제거 하고싶으면 Set바꿨다 arr 하면 쉽게 해결
function eliminateDuplicates(items) {
return [...new Set(items)];
}
let set = new WeakSet(),
key = {};
set.add(key);
key = null;
console.log(key); // false
//일반 Set이었으면 set.size ==> 1
let myMap = new Map(); //{}
myMap.set(1, 'hello'); //{1=>'hello'}
myMap.set('1', 'hello'); //{1=>'hello', '1'=>'hello'}
myMap.set(1, 'world'); //{1=>'world', '1'=>'hello'}
myMap.get(1); //'world'
myMap.has(1); //true
myMap.delete(1); // {'1' => 'hello'}
//clear, size 는 Set과 같다.
let myMap = new Map(['name', 'kyle'], ['city', 'seoul']); //{"name" => "kyle", "city" => "seoul"}
Map객체에 각 요소에 해당하는 키,값 쌍을 Map에 등록한 순서대로 포함한 새로운 Iterator 객체를 반환한다.
entries()를 사용해 for of문으로 쉽게 키,값 에 접근할 수 있다.
const map1 = new Map();
map1.set('0', 'foo');
map1.set(1, 'bar');
const iterator1 = map1.entries(); //MapIterator {"0" => "foo", 1 => "bar"}
console.log(map1); //Map { '0' => 'foo', 1 => 'bar' }
console.log(iterator1.next().value); //[ '0', 'foo' ]
console.log(iterator1.next().value); //[ 1, 'bar' ]
console.log(iterator1.next().value); //undefined
for (let x of map1.entries()) {
console.log(x);
}
//[ '0', 'foo' ]
//[ 1, 'bar' ]
출처 : https://infoscis.github.io/2018/01/27/ecmascript-6-sets-and-maps/
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Map/entries
Map이란?
Map은 자료구조로 key-value 쌍으로 저장되는 형식이다.
key는 unique하기때문에 중복이 없다.
맵은 주로 데이터를 fast searching and looking up 하는데 사용된다.
Object란?
Object역시 key-value로 저장한다. object에서 key를 주로 property라고 부른다. object에서도 key는 unique하고 하나의 value와만 associated 돼 있다.
ex)
instanceof
메소드
let myMap = new Map();
myMap.set(1, 2);
console.log(myMap instanceof Object); //true
console.log(myMap instanceof Map); //true
let obj = new Object();
console.log(obj instanceof Map); //false
다른 차이를 더 보자
Object
let obj = {};
let obj = new Object();
//or
let obj2 = new object();
let obj = Object.create(null);
Object.prototype.create
은 생성자 없이 상속을 이용하고 싶은 특별한 상황에서만 사용합니다.
let Vehicle = {
type: 'General',
show: () => console.log(this.type)
};
let Car = Object.create(Vehicle); //vehicle 상속하는 new Car
//Car.type = 'General';
//prototype객체(__proto__가 가르키는 객체)가 Vehicel이다.
Map
let map = new Map(); //Empty Map {}
let map = new Map([
[1, 2],
[2, 3]
]); // map = {1=>2, 2=>3}
get
이라는 메소드를 이용해서 element value에 접근한다. 우리는 element value를 검색하는 key값을 필요로 한다.has
메소드를 이용해 key값의 존재 유무를 확인할 수 있다.obj.key
or obj['key']
hasOwnProperty()
을 이용해 존재유무 확인 가능-Map은 iterable하다. -for of
,forEach
로 접근할 수 있다. for of
로 접근할 때 for (const [key,value] of map) 으로 해서 key,value 따로접근할 수 도 있다. forEach
도 같다.
for in
으로 접근가능하다.참고 : https://medium.com/front-end-weekly/es6-map-vs-object-what-and-when-b80621932373