Map과 Set
Es6 이전)
const u1 = {name: 'dasom', age: 22}
const roles = new Map();
roles.set(u1, 'user');

key > Object(u1)
value > String('user')
const map = new Map();
map.set({name: 'dasom', age: '22}, 'user');
map.values(); // MapIterator {"user"}
[...map.values()] // ["user"]
map.values().next() // {value: "user", done: false}
map.keys(); // MapIterator {{…}} > {name: 'dasom', age: '22}
[...map.keys()] // [{name: 'dasom', age: '22}]
maps.keys().values() // {value: {…}, done: false}
map.size // 1
map.has({name: "dasom", age: 22}) // false => 객체는 안되는 모양이다
map.set('a', 'user');
map.has('a') // true
map.has('b') // false
map.delete('a') // 삭제됨
map.clear() // map이 삭제됨
객체 이어야 함가비지 컬렉션 ; 자바스크립트는 코드 어딘가에서 객체를 참조하는 한 그 객체를 메모리에 유지함. 자바스크립트에서 가비지컬렉션은 언제 일어나는지 알 수 없음 -> 때문에 이터러블할 수 없다const arr= ['a', 'b', 'c', 'd', 'a', 'b'];
const set = new Set(arr); // Set(4) {"a", "b", "c", "d"}
set.add({name: "dasom", age: 22}, 'user');
set.add({name: "dasom", age: 22}, 'user');
// Set(6) {"a", "b", "c", "d", {…}, {…} -> 객체는 안되는 모양
[...set]; // ["a", "b", "c", "d", {…}, {…}]
set.has('a') // true
function solution(gems) {
var answer = [];
var answer_list = [];
let distinct = [...new Set(gems)];
let map = new Map();
let min = 1000000;
for(let i=0; i<gems.length; i++){
if(map.has(gems[i])){
map.delete(gems[i]);
}
map.set(gems[i], i);
if(map.size === distinct.length){
answer_list.push([map.values().next().value + 1, i + 1]);
}
}
answer_list.sort((a, b)=>{
return (a[1]-a[0])-(b[1]-b[0]);
})
return answer_list[0];
}