Jos*_*nes 4 javascript iterator generator ecmascript-6
是否可以访问迭代器的前一个值,例如:
function* gen () {
yield* [0,1,2,3]
}
var it = gen();
it.next().value // 0
it.next().value // 1
it.last().value // would be awesome if this was 0
Run Code Online (Sandbox Code Playgroud)
这完全是一个好奇心问题。我最近一直在玩生成器,想知道是否有人以这种方式使用生成器/迭代器?
如果是这样,我很想看到您的解决方案。(不需要遵循上面的语法)-谢谢
JS 迭代器只知道一个方向:向前。这意味着,如果您想将自定义迭代器与 for 循环等一起使用,它将忽略您的自定义属性。但是,您可以创建自己的自定义迭代器仅供您自己使用:
const obj = {
values: [0,1,2,3],
[Symbol.iterator]() {
const values = this.values;
const min = 0;
const max = values.length - 1;
let index = -1;
return {
next() {
index = Math.min(index + 1, max);
return { value: values[index], done: index >= max };
},
prev() {
index = Math.max(index - 1, min);
return { value: values[index], done: index <= min };
}
}
}
}
var it = obj[Symbol.iterator]();
console.log(it.next().value); // 0
console.log(it.next().value); // 1
console.log(it.prev().value); // would be awesome if this was 0
console.log(it.prev().value); // would be awesome if this was 0
console.log(it.prev().value); // would be awesome if this was 0
console.log(it.next().value); // would be awesome if this was 1
Run Code Online (Sandbox Code Playgroud)