ES6 for with键和生成器

时间:2018-06-25 06:17:38

标签: javascript

如果我有一个数组:

[1, 2, 3, 4, 5] - 

我可以循环播放:

for (let [i, x] of arr.entries()){..}

如果我具有生成器功能:

function* g() {
   yield 1; yield 2; yield 3;
}

我不能。

所以问题是如何使用for of和generator来获取循环的索引和键。

常规数组和生成器的语法是否相同。

最后,为什么生成器没有“进入”方法,因为它们都是可迭代的。

如果以不同的方式访问它们,迭代的意义何在?

2 个答案:

答案 0 :(得分:2)

实际上,生成器的工作方式与正常的可迭代数据数据结构略有不同。 只是为了好玩,如果您希望从某个生成器中获取索引和值,而您要产生的内容确实具有索引,则可以。你什么都做不了。

function* gen() {
  a = [3, 5, 6]
  for (var i in a){
   yield [i, a[i]]
  }
}

for (let [i, x] of gen()){
  console.log(i, x)
}

答案 1 :(得分:0)

您基本上想在生成器上使用Array.prototype.entries,但这种方式不起作用。

但是,您可以轻松地将生成器转换成数组,然后然后使用entries方法:

function* g() {
  yield 1; yield 2; yield 3;
}

for (let [i, x] of [...g()].entries()){..}