【发布时间】:2021-11-09 09:10:13
【问题描述】:
我是一个初学者,正在阅读本书中的迭代器一章
JavaScript:权威指南
我无法理解以下示例中的 next() 方法,该方法是关于为 JavaScript 数组的 filter() 方法创建基于迭代的替代方法。
// Return an iterable object that filters the specified iterable,
// iterating only those elements for which the predicate returns true
function filter(iterable, predicate) {
let iterator = iterable[Symbol.iterator]();
return { // This object is both iterator and iterable
[Symbol.iterator]() {
return this;
},
next() {
for(;;) {
let v = iterator.next();
if(v.done || predicate(v.value)) {
return v;
}
}
}
};
}
让我们用一个数组来测试这个函数。
let a = [1,2,3,4,5]
let iter = filter(a, x => x>3) // Call the function
// Lets check the returned object of iter.next() method
iter.next() // {value: 4, done: false}
iter.next() // {value: 5, done: false}
iter.next() // {value: undefined, done: true}
我对这里的next() 方法完全感到困惑。请帮助我理解它。
另外,我无法理解...next() 方法包含无限 for 循环。但它是什么让它打破了这个循环。这里没有这样的条件。
提前致谢
【问题讨论】:
标签: javascript loops iterator