Javascript 我可以用一个简单的函数生成迭代器吗?(无生成器或符号。迭代器)
我一直在尝试使用普通函数制作迭代器,不使用生成器,也不使用Javascript 我可以用一个简单的函数生成迭代器吗?(无生成器或符号。迭代器),javascript,iterator,iterable,Javascript,Iterator,Iterable,我一直在尝试使用普通函数制作迭代器,不使用生成器,也不使用符号.iterator协议用于学术目的。为此,我创建了一个函数,它返回一个带有next参数的对象,但尝试将其作为For…of循环的iterable参数运行会产生不需要的结果 以下是迄今为止我的代码,我从 在控制台上,我只得到一个结果:next 我是否在创建函数时出错了?或者for…of是否仅设计用于生成器和符号.iterator属性 在节点v8.11.1上执行问题在于迭代器此函数返回迭代器,但for/of构造需要一个iterable 好的
符号.iterator
协议用于学术目的。为此,我创建了一个函数,它返回一个带有next
参数的对象,但尝试将其作为For…of
循环的iterable
参数运行会产生不需要的结果
以下是迄今为止我的代码,我从
在控制台上,我只得到一个结果:next
我是否在创建函数时出错了?或者for…of
是否仅设计用于生成器和符号.iterator
属性
在节点v8.11.1上执行问题在于
迭代器此
函数返回迭代器,但for/of
构造需要一个iterable
好的,等等,有什么区别吗?
发件人:
为了iterable,对象必须实现@@iterator
方法,这意味着对象(或其中一个对象)将
原型链)必须有一个具有@@iterator
键的属性,该键是
可通过常量符号访问。迭代器:
另一方面:
当对象使用
以下语义:Ommited由于长度,TL;博士:下一个方法是什么
返回以下形式的对象:{value:T,done:boolean}
它们的关系在于调用iterable的@@iterator
方法返回一个迭代器
for/of
循环总是需要一个iterable,因此如果要使用for/of
,必须使用@@iterator
/符号。iterator
。就我所知,这是没有办法的。但是,只要创建一个对象,当它是Symbol时返回迭代器,就可以轻松地修改代码段以使用它。迭代器方法被调用:
函数迭代此(arr){
设i=0;
返回{
下一步:函数(){
返回i }
iterator对象是用一种特殊的结构构建的,这种结构允许在
中使用for对其进行迭代。如果不通过迭代器公共符号应用迭代器逻辑,我看不出在任何级别上都可能复制效果。它超出了本机功能。
function iterateThis(arr){
let i = 0;
return {
next: function() {
return i < arr.length ?
{value: arr[i++], done: false} :
{done: true};
}
};
}
const iterable = iterateThis([1,2,3,4,5]);
for(item in iterable){
console.log(item);
}