JavaScript Object는 왜 iterable이 아닌가?

1 개요[ | ]

JavaScript Object는 왜 iterable이 아닌가?
JavaScript 객체는 왜 iterable이 아닌가?

2 Object는 key-value 저장소 역할[ | ]

  • Object는 key-value 형식으로 데이터를 저장하는 일반적인 데이터 구조이다.
  • Array나 Map처럼 순서가 중요한 데이터 구조가 아니라, key로 값을 조회하는 것이 주된 목적이다.
  • 즉, Object는 순차적인 반복(iteration)을 염두에 둔 데이터 구조가 아니다.

3 JavaScript의 Iterable 프로토콜[ | ]

  • JavaScript에서 iterable이 되려면 Symbol.iterator 메서드를 구현해야 한다.
  • Array, Map, Set 등은 Symbol.iterator를 내장하고 있어 for...of 루프에서 사용할 수 있지만, Object는 기본적으로 이를 구현하지 않는다.

4 대안[ | ]

4.1 iteration 시키기[ | ]

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

console.log(Object.keys(obj));    // ['a', 'b', 'c']
console.log(Object.values(obj));  // [1, 2, 3]
console.log(Object.entries(obj)); // [['a', 1], ['b', 2], ['c', 3]]

4.2 iterable 만들기[ | ]

  • Symbol.iterator를 직접 구현하면 객체도 iterable하게 만들 수 있다.
const obj = { a: 1, b: 2, c: 3 };

obj[Symbol.iterator] = function* () {
    for (const key of Object.keys(this)) {
        yield [key, this[key]];
    }
};

for (const [key, value] of obj) {
    console.log(key, value);
}

5 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}