2016-12-30 3 views
2

오늘 발전기 기능을 가진주기를 통해 배열을 구현하는 방법은 다음과 같습니다내가 같이 타이프 라이터의 사이클을 통해 배열을 제공하는 가장 신속한 방법이 될 것입니다 무슨 궁금

['one', 'two', 'three'] 

경우 다음 값을 three 이후는 one이 될 것이고, 제너레이터 기능을위한 좋은 후보라고 생각합니다. 그러나 그것은 나를 위해 작동하지 않는 것 같습니다. 다음 코드에 어떤 문제가 있습니까? ,

function* stepGen(steps){ 
 
    let index = 0; 
 
    while (true) { 
 
    yield steps[index]; 
 
    index = (index+1)%steps.length; 
 
    } 
 
} 
 

 
let gen = stepGen(['one', 'two', 'three']); // pass array to make it more reusable 
 
console.log(gen.next().value); 
 
console.log(gen.next().value); 
 
console.log(gen.next().value); 
 
console.log(gen.next().value); 
 
console.log(gen.next().value);

또는 당신은 또한 반복 가능한에서 값을 산출 yield*를 사용할 수 있습니다

function* stepGen(){ 
    const steps = ['one', 'two', 'three']; 

    let index = 0; 

    if(index < steps.length - 1){ 
    index++; 
    } else { 
    index = 0; 
    } 
    yield steps[index]; 
} 

let gen = stepGen(); 
console.log(gen.next().value); 
console.log(gen.next().value); 
console.log(gen.next().value); // should be 'three' 
console.log(gen.next().value); // should be 'one' 
console.log(gen.next().value); 
+0

발전기 코드에 루프가 있어야합니다. – trincot

답변

5

당신은 다른 하나의 yield 일어나고있다, 발전기 코드에서 루프를 필요 하나씩 :

function* stepGen(steps){ 
 
    while (true) yield* steps; 
 
} 
 

 
let gen = stepGen(['one', 'two', 'three']); 
 
console.log(gen.next().value); 
 
console.log(gen.next().value); 
 
console.log(gen.next().value); 
 
console.log(gen.next().value); 
 
console.log(gen.next().value);

+0

또한 어레이를 인수로 사용하면 OP –

+0

@ BalázsÉdes의 바로 사용할 수있는 블록입니다. 감사합니다. 그 개선 아이디어를 통합했습니다. – trincot

+0

정말 두 번째 것을 좋아합니다. 오늘 새로운 것을 배웠습니다. :) –