使用javascript中的数组,获取迭代的当前索引很容易 . 您可以使用 forEach
并且索引是第二个条目,或使用 for...of
和 .entries()
以及数组解包 .
但是生成器没有 .entries()
方法 . 如何在 for...of
循环中获取生成器的当前索引?
我基本上想要:
function* myGen(){
let i = 0;
while(true) {
i+=1;
yield i;
}
}
for(let [j, index] of myGen().entries()) { //<-- I want .entries() but for a Generator
//...
}
//Running the above produces TypeError: myGen(...).entries(...) is not a function or its return value is not iterable
3 回答
稍微不同的方法可能是使
myGen()
成为一个常规函数,它返回一个遵循迭代器协议而不是生成器的对象 . 然后你可以给它一个entries()
方法 . 它的工作方式与生成器略有不同(你不能直接在它上面调用next()
) . 但它是自包含的,并且应该在预期迭代器的情况下按预期工作:没有内置的方法 - 生成器必须产生包含索引的东西 . 例如:
如果你不能修改你想要得到索引的生成器,你可以将它放在另一个跟踪索引的生成器中(或者你可以在每次迭代外部递增):
不建议将内容添加到内置原型中,但如果您真的希望代码能够像这样工作(在任何生成器上调用
.entries()
),那么您可以按以下步骤操作:然而,定义效用函数更为谨慎 .