• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

이터레이터 질문드려용!

20.12.03 02:31 작성 조회수 177

0

오브젝트는 배열을 반환하고 

map,set 은 이터레이터를 반환한다고 하셧는데

배열은 이터러블하니까 즉 이터레이터를 가지고있으니 같다고 할수있을까요?? 

또  오브젝트와 맵은 어떨대 구분해서 사용해야할지 모르겠습니다..

답변 3

·

답변을 작성해보세요.

1

- 이 영상은  객체에 비해 Map이 가지는 장점을 설명하기 위한 목적 하에 진행된 내용입니다.
강의의 주제에 포커스를 맞춰주시면 좋을 것 같아요.

- 영상 흐름은 다음과 같습니다.

1) 객체는 iterable하지 않다.
2) 'for in'문으로 가능한것 같지만 실은 iterable하다고 볼 수는 없다. 
3) 'for in'문으로 iterable한 다른 객체와 비슷한 효과를 얻으려면 hasOwnProperty가 필요하다.
4) 그런데 Map은 이러한 추가동작 없이도 그 자체로 iterable하다.

- "객체를 배열로 변환하는 방법 중 가장 먼저 떠올릴 수 있는 방법은 for in문이라고 말씀드렸던 것이지,
이 것이 유일한 방법이라는 취지로 소개한 것은 아닙니다.

- 영상에서 바로 이어서 Object.keys도 소개를 해드리고 있는데,
Object.entries는 그 연장선상에 있는 방법이라 굳이 소개하지 않고 넘어갔습니다. 
객체를 배열로 전환하는 방법은 Object.entries가 더 편리하고 간단한 좋은 방법입니다.

0

라푼젤님의 프로필

라푼젤

2021.03.21

객체를 배열로 변환하는 방법을 설명하면서 obj.hasOwnProperty에 키의 유무를 판단하여 배열로 전환하는 방법밖에 없다고 하셨는데
(영상에서 2분 40초경)
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;

}

Object.entries(o) 객체를 배열로 만드는것과 차이가 있는건가요?
콘솔로 출력했을때 차이를 느끼지 못해서 궁금해서 여쭤봅니다. 

0

1. "오브젝트는 배열을 반환한다" 는게 무슨 말씀이신지 모르겠습니다.
혹시 `Object.entries(obj)`나 `Object.keys(obj)`, Object.values(obj)` 등을 실행한 결과를 말씀하시는 걸까요?

2. map, set이 "이터레이터를 반환한다":  늘 그렇지는 않습니다.
다음과 같은 어떤 특수한 명령 중 일부를 수행하지 않고는 이터레이터를 반환하지 않습니다.

set[Symbol.iterator]()
set.values()
set.keys()
set.entries()

map[Symbol.iterator]()
map.values()
map.keys()
map.entries()

3. 어떤 면에서 같은지를 물어보시는지 모르겠습니다만, 이터러블한 개체라는 측면에서는 같다고 볼 수 있겠네요;
다만 강의에서 설명드린대로 배열은 그 자체로 이터레이터는 아니기 때문에, 'next()' 메서드를 호출할 수는 없습니다.
이 부분은 이터레이터 챕터를 들으시면 이해 되시리라 봅니다.

4. 강의상에서 객체와 맵의 차이점을 소개하고 있습니다. 예를 들어 오브젝트는 키에 오직 문자열 및 심볼만 지정할 수 있는 반면 맵은 키에 어떤 것이든 지정할 수 있는 등입니다. 이러한 차이점들에 의해 사용범위가 결정되겠죠. 사용범위는 구체적인 상황에 따라, 필요성에 따라, 사용자의 판단에 따라 얼마든지 달라질 수 있는 부분이기 때문에 콕 찝어서 '이럴 때엔 객체를, 저럴땐 맵을 쓴다'라고 말씀드리긴 어렵네요.