【发布时间】:2020-08-10 07:48:29
【问题描述】:
iterator 经常使用,例如在spread 运算符、for/of-loop、解构等中。但它们是隐藏的。我想知道是否存在您会积极使用如何实现迭代器的知识的用例?
例如,使用迭代器对数组进行迭代过于复杂,如下所示,我不知道为什么有人会自己实现迭代器:
function arrayIterable(arr = []) {
let index = 0;
const len = arr.length;
const arrayIterator = {
next: () => {
let result;
if (index === len) {
return { value: arr[index], done: true };
}
result = { value: arr[index], done: false }
index++;
return result;
}
};
return arrayIterator;
}
const myArr = ['a','b','c','d'];
let iter = arrayIterator(myArr);
let result = iter.next();
while (!result.done) {
console.log(result.value);
result = iter.next();
}
【问题讨论】:
-
您是否在询问手动实现迭代器(而不是使用生成器函数),询问手动调用迭代器(而不是使用@ 987654325@/
yield*),还是两者兼有? -
"例如,迭代数组" - 嗯,这是一个非常糟糕的例子,因为迭代数组是一个已解决的问题,并且不需要迭代器。
-
@Bergi 手动实现迭代器。背景:我正在阅读有关迭代器的内容,并在思考如何在日常工作中使用这些知识。除了知道它是如何在幕后工作的之外,我还在寻找我会真正积极使用它的用例。
-
您已得到答案,欢迎评论。
-
在这种情况下,在 99% 的情况下,使用生成器函数可以更轻松地完成任务。如果您想添加不属于迭代协议的额外功能,您只需要自己实现迭代器对象,例如前瞻、访问当前值、缓存内容、制作没有隐式排队的异步迭代器,或者实际上只是任何功能需要直接访问正在运行的迭代器的状态。
标签: javascript loops iterator