[JS] Object를 iterable하게 만들어주는 함수 구현하기

은비·2023년 10월 3일
1
post-thumbnail

Object를 iterable하게 만들어주어 for of으로 실행될 수 있게끔 만들어주었다.

iterable, iterator란?

Array는 [Symbol.iterator]() 메서드를 호출시 next() 메서드가 호출된다.

Object는 [Symbol.iterator]() 메서드 호출시 is not a function 이라고 오류를 나타낸다.
이처럼 오류가 나타나지 않고 Object를 iterable하게 만들어주는 함수를 구현해 볼 예정이다.

Array에 next() 메서드 호출시 {value: , done: } 형태로 출력된다.

  1. myIterator 함수는 객체(obj)를 매개변수로 받아, 해당 객체에 Symbol.iterator속성을 사용하여 iterator를 추가한다.

  2. iterator 함수 내부에서는 Object.values(obj)를 사용해 obj 객체의 모든 값을 포함하는 배열인 values를 생성한다. 그리고 -1로 초기화된 변수 num을 선언한다.

  3. 반복자 함수는 next 메소드가 있는 객체를 반환한다. next 메소드는 values 배열을 순회하는 역할을 담당한다. 이 메소드가 호출될 때마다, num 값이 증가된다.

  4. 만약 num이 values 배열의 길이와 같아지면, 모든 요소가 순회되었음을 의미하므로
    { value: undefined, done: true } 를 반환하여 순회가 완료되었음을 나타낸다.
    그렇지 않다면 { value: values[num], done: false },
    즉 다음 순회 값과 더 많은 반복이 가능함을 나타내도록 반환한다.

myIterator 함수를 통해 어떤 객체에 대해서도 원하는 방식으로 값을 순차적으로 꺼낼 수 있는 커스텀 iterator를 구현할 수 있다.

0개의 댓글