Javascript 如何使用生成器函数实现循环数组

Javascript 如何使用生成器函数实现循环数组,javascript,typescript,generator,yield,Javascript,Typescript,Generator,Yield,今天我想知道在TypeScript中提供循环数组的最快方法是什么,如: ['one', 'two', 'three'] 其中three之后的下一个值将是one,我认为这是一个很好的生成器函数候选值。然而,它似乎对我不起作用。以下代码有什么问题 function* stepGen(){ const steps = ['one', 'two', 'three']; let index = 0; if(index < steps.length - 1){ index++

今天我想知道在TypeScript中提供循环数组的最快方法是什么,如:

['one', 'two', 'three'] 
其中
three
之后的下一个值将是
one
,我认为这是一个很好的生成器函数候选值。然而,它似乎对我不起作用。以下代码有什么问题

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);
函数*stepGen(){
常量步长=['1'、'2'、'3'];
设指数=0;
如果(索引<步长长度-1){
索引++;
}否则{
指数=0;
}
屈服台阶[指数];
}
设gen=stepGen();
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
发生:

函数*stepGen(步骤){
设指数=0;
while(true){
屈服台阶[指数];
索引=(索引+1)%steps.length;
}
}
设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)生成器代码中需要有一个循环。此外,如果将数组作为参数,则它是可立即用于OP@Bal谢谢,我采纳了这个改进的想法。没错,@BalázsÉdes是对的——我也在发现新事物的力量,比如地图、布景或发电机。我不太确定我是否需要一个发电机,但有了这个语法,这只是一个梦想。但是,我想知道为什么JSFIDLE.net在尝试在JavaScript 1.7或TypeScript下运行此代码时会抛出错误。不得不求助于fiddle中的常规JavaScript选项。似乎可以使用,但JSFIDLE中的TypeScript版本不支持
yield
。我想它不是1.6版。