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
方法给出错误的结果您在代码中到底更改了什么?您所说的“declare
arr
”是什么意思,它已经被声明了?您需要能够从
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())