상세 컨텐츠

본문 제목

[자바스크립트] 문장에서 리터레이터 뽑는거

카테고리 없음

by esoesmio 2023. 5. 16. 00:05

본문

// var someString = "hi";
// var iterator = someString[Symbol.iterator]();
//
// var result = iterator.next();
// while (!result.done) {
//     console.log(result.value);
//     result = iterator.next();
// }


let something = 'hi';
let iterator = something[Symbol.iterator]();

let result = iterator.next();

while(!result.done){
    console.log(result.value);
    result = iterator.next();
    
}

 

이터레이터 펑션 만들기

 

function makeIterator(array){
    var nextIndex = 0;

    return {
        next(){
            return nextIndex < array.length ?
                {value: array[nextIndex++], done: false} :
                {done: true};
        }
    };
}

var it = makeIterator(['yo', 'ya']);

console.log(it.next().value); // 'yo'
console.log(it.next().value); // 'ya'
console.log(it.next().done);  // true

 

 

ㅈ제네레이터도 만듬

function* makeSimpleGenerator(array){
    var nextIndex = 0;

    while(nextIndex < array.length){
        yield array[nextIndex++];
    }
}

var gen = makeSimpleGenerator(['yo', 'ya']);

console.log(gen.next().value); // 'yo'
console.log(gen.next().value); // 'ya'
console.log(gen.next().done);  // true



function* idMaker(){
    var index = 0;
    while(true)
        yield index++;
}

var gen = idMaker();

console.log(gen.next().value); // '0'
console.log(gen.next().value); // '1'
console.log(gen.next().value); // '2'
// ...

iterable과 iterator는 자바스크립트에서 순회 가능한 객체를 다룰 때 사용되는 개념입니다. 이 두 용어는 서로 연관되어 있지만 약간의 차이가 있습니다.

  • Iterable(이터러블): 이터러블은 순회 가능한 객체로, Symbol.iterator 메서드를 가지고 있는 객체입니다. Symbol.iterator 메서드는 이터레이터(iterator)를 반환하는 함수입니다. 이터러블은 for...of 루프나 스프레드 문법과 같이 순회할 수 있는 문맥에서 사용될 수 있습니다. 배열, 문자열, Set, Map과 같은 자바스크립트의 내장 컬렉션 객체는 모두 이터러블입니다. 또한, 직접 Symbol.iterator 메서드를 구현하여 사용자 정의 객체를 이터러블로 만들 수도 있습니다.
  • Iterator(이터레이터): 이터레이터는 이터러블에서 Symbol.iterator 메서드를 호출하여 얻을 수 있는 객체입니다. 이터레이터는 next() 메서드를 가지고 있으며, next()를 호출할 때마다 순회 중인 이터러블의 다음 값을 반환합니다. next()는 { value, done } 형태의 결과 객체를 반환합니다. value는 다음 값이고, done은 이터레이터의 순회가 끝났을 때 true를 나타냅니다. 이터레이터는 순회하는 동안 현재 상태를 유지하며, 순회를 일시 중단하고 재개할 수 있는 상태 관리 기능을 제공합니다.

간단히 말하면, 이터러블은 순회 가능한 객체이고 이터레이터는 순회를 수행하는 객체입니다. 이터러블은 Symbol.iterator 메서드를 통해 이터레이터를 생성하고, 이터레이터는 next() 메서드를 호출하여 순회를 진행하며 값을 반환합니다.

예를 들어, 배열은 이터러블이며 Symbol.iterator 메서드를 통해 이터레이터를 얻을 수 있습니다. 이터레이터는 배열의 값을 순차적으로 반환하며, next()를 호출할 때마다 다음 값을 반환합니다.

댓글 영역