ES6_Symbol.iterator+generator

Symbol[iterator]+generator

  • 두가지 기능을 활용하여 iterable객체를 반환하는 함수를 만들어보자
const obj = {
  1 : 'one',
  2 : 'two',
  3 : 'three'
}
for(let a of obj){
  console.log(a) // obj is not iterable
}
console.log(...obj) // error
  • 현재 obj는 반복순회할 수 없기 때문에 위의 에러가 발생한다.
  • 해결하기 위해, 반복할 수 있는 Array의 형식으로 바꾸기위해 Object.keys 혹은 Object.values로 변환해줘야 한다.
  • 위처럼 Object method를 활용하여 새롭게 배열을 만드는것이 아닌, Symbol.iterator로 할 수 있다.
const ChangeToIterable = (unIterableObj) => {
  const iter = valuesIter(unIterableObj);
  return {
    [Symbol.iterator] : function(){
      return this; // iterator객체를 반환함
    },
    next : function(){
      return iter.next();
    }
  }
};

const valuesIter = function*(unIterableObj){
  for(let key in unIterableObj){
    yield unIterableObj[key];
  }
};

// 정상작동됨.
for(let a of ChangeToIterable(obj)){
  console.log(a) // one two three
};

@SangMin
👆 H'e'story

🚀GitHub