JavaScript - Map


객체는 iterable하지 않다.

안쪽에 있는 요소들을 돌면서 하나하나 뭐 할 수 있는 걸 iterable한다고 한다.

const o = { a:1, b:2, c:3 }

//객체를 배열로 변환하려면

const obj2Arr = obj => {
  const arr = []
  for(let key in obj){
    if(obj.hasOwnProperty(key)){
      arr.push([key, obj[key]])
    }
  }
  return arr
}

//키를 문자열로 인식해서 키 값의 unique함을 인식하지 못한다. 프로퍼티 개수를 직접 파악할 수 없다.

Map

  1. [key, value] 쌍으로 이루어진 요소들의 집합
  2. 순서를 보장하며, iterable이다.
const map = new Map()
map.set('name', 'YJ') //추가하기

console.log(map.size)

console.log(map.get('name'))

map.delete('name')

map.has('name')

//초기값 지정 가능, 근데 iterable 가능한 애들이 배열 쌍으로 지정되어 있어야 한다.
const arr = [[10,10], ['1', '2'], [false, true]]

const map1 = new Map(arr)

const keys = map1.keys()

keys // MapIterator {10, "10"}

keys.next().value //10
keys.next().value //10 

keys, values, entries 같은 경우는 object일 경우 배열로 반환하고 set과 map은 setiterator, mapiterator로 반환한다. 그래서 object의 경우 next() 이런거 못한다.