【发布时间】:2018-07-14 07:32:06
【问题描述】:
我正在研究 javascript 生成器和迭代器,想知道是否有办法编写生成器函数来返回当前位置的值 --- 当然不必调用 next() 或记住返回的值来自上一次next() 通话。
更具体地说,我失败的尝试:
function* iterable(arr) {
this.index = 0;
this.arr = arr;
while(this.index < this.arr.length) {
yield this.arr[this.index++];
}
}
iterable.prototype.current = function () {
return this.arr[this.index];
}
const i = iterable([0, 1, 2]);
console.log(i.current()); // TypeError: Cannot read property 'undefined' of undefined
可以使用这样的类来实现所需的功能(我知道迭代器的返回值将是像 { value: 1, done: false } 这样的对象):
class iterableClass {
constructor(arr) {
this.index = 0;
this.arr = arr;
}
get(i) {
return this.index < arr.length ? this.arr[this.index] : false;
}
next() {
const val = this.get(this.index);
this.index++;
return val;
}
current() {
return this.get(this.index);
}
}
const i = iterableClass([0, 1, 2]);
console.log(i.current()); // 0
虽然我可以只使用类(甚至是普通的旧函数),但我想知道这是否可以使用生成器/迭代器来完成,或者是否有更好的选择。
【问题讨论】:
标签: javascript iterator generator