JavaScript Object는 왜 iterable이 아닌가?


개요

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

Object는 key-value 저장소 역할

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

JavaScript의 Iterable 프로토콜

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

대안

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]]

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);
}

같이 보기