Javascript 数组迭代器
从 怎么做?Javascript 数组迭代器,javascript,Javascript,从 怎么做? 我知道ES 6中的迭代器,但我希望支持IE您需要添加与您发布的类似的added()函数,然后更新index的初始值,以便next()和previous()函数工作。您需要将其设置为输入数组长度,以便next()函数知道您位于最后一个元素 var Iterator = function(arr){ return { index : arr.length, hasNext : function(){ return this.index < arr.length -
我知道ES 6中的迭代器,但我希望支持IE您需要添加与您发布的类似的
added()
函数,然后更新index的初始值,以便next()和previous()函数工作。您需要将其设置为输入数组长度,以便next()函数知道您位于最后一个元素
var Iterator = function(arr){ return {
index : arr.length,
hasNext : function(){ return this.index < arr.length - 1; },
hasPrevious: function(){ return this.index > 0; },
current: function(){ return arr[ this.index ]; },
next : function(){
if(this.hasNext()){
this.index = this.index + 1;
return this.current();
}
return false;
},
previous : function(){
if(this.hasPrevious()){
this.index = this.index - 1
return this.current();
}
return false;
},
added: function(x){
arr.push(x);
this.index++;
}
}
};
var iter = Iterator([1,2,3]);
console.log(iter)
iter.added(1);
iter.added(6);
iter.added(7);
iter.added(8);
console.log(iter)
console.log(iter.next())
console.log(iter.previous())
console.log(iter.previous())
console.log(iter.previous())
console.log(iter.previous())
console.log(iter.next())
console.log(iter.current())
var迭代器=函数(arr){return{
索引:arr.length,
hasNext:function(){返回this.index0;},
当前:函数(){return arr[this.index];},
下一步:函数(){
if(this.hasNext()){
this.index=this.index+1;
返回this.current();
}
返回false;
},
上一个:函数(){
if(this.hasPrevious()){
this.index=this.index-1
返回this.current();
}
返回false;
},
新增:功能(x){
arr.push(x);
这个.index++;
}
}
};
var iter=迭代器([1,2,3]);
控制台日志(iter)
增加了国际热核实验堆(1);
增加了国际热核实验堆(6);
增加了国际热核实验堆(iter)(7);
增加了国际热核实验堆(iter)(8);
控制台日志(iter)
console.log(iter.next())
console.log(iter.previous())
console.log(iter.previous())
console.log(iter.previous())
console.log(iter.previous())
console.log(iter.next())
console.log(iter.current())
哪些产出:
对象{arr:Array[3],索引:3}对象{arr:Array[7],索引:7}
假
8
7
6
1
6
六, 这是一把小提琴:
希望有帮助 从添加的
中删除this.index++
,它就会工作。还是不是?为什么不呢?好的。。。。。但我想在添加当前索引时更改OK,这对我来说是出乎意料的,但还是去做吧。现在您的问题是什么?您是否试图在python中实现类似于.send
?顺便说一句,hasNext
方法给出错误的结果您在代码中到底更改了什么?您所说的“declarearr
”是什么意思,它已经被声明了?您需要能够从added
函数访问arr
,因此您需要添加它,请参见第2行。当我调用iter.next()返回6。。。。但是我想返回false///only support prev()@AdamKonieska:注意它也在hasNext
和current
函数中。在任何地方,它都不能作为一个属性访问。你不需要那个。您可以直接访问该变量。请参阅@zloctb:如果您希望迭代器从末尾开始,则应将其设置为索引:arr.length
added : function(data){
arr.push(data);
this.index++
}
iter.added(1);
iter.added(6);
iter.added(7);
iter.added(8);
var Iterator = function(arr){ return {
index : arr.length,
hasNext : function(){ return this.index < arr.length - 1; },
hasPrevious: function(){ return this.index > 0; },
current: function(){ return arr[ this.index ]; },
next : function(){
if(this.hasNext()){
this.index = this.index + 1;
return this.current();
}
return false;
},
previous : function(){
if(this.hasPrevious()){
this.index = this.index - 1
return this.current();
}
return false;
},
added: function(x){
arr.push(x);
this.index++;
}
}
};
var iter = Iterator([1,2,3]);
console.log(iter)
iter.added(1);
iter.added(6);
iter.added(7);
iter.added(8);
console.log(iter)
console.log(iter.next())
console.log(iter.previous())
console.log(iter.previous())
console.log(iter.previous())
console.log(iter.previous())
console.log(iter.next())
console.log(iter.current())