8

私は MDN (Mozilla Developer Network) を調べていて、イテレーターとジェネレーターに出くわしました

当然のことながら、Google Chrome v21 のページに記載されているコードのスニペットを試しました。具体的には、このコード:

var it = Iterator(lang);
for (var pair in it)
  print(pair); // prints each [key, value] pair in turn

ただし、コンソールは次のエラー メッセージを返します。

ReferenceError: Iterator is not defined

なぜですか?イテレータ関数は非推奨か何かですか? ポイントがありませんか?あなたの助けと時間をありがとう:-)

4

6 に答える 6

6

配列には、反復子のように機能するマップ関数が組み込まれています。

[1,2,3].map(function(input){console.log(input)});

標準出力:

1
2
3

最悪の場合、反復子オブジェクトを簡単に設計できますが、これを完全にはテストしていませんが、バグがあればすぐに機能させることができるはずです。

var Iterator = function(arr){ return {
    index : -1,
    hasNext : function(){ return this.index <= arr.length; },
    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;
    }
}   
};

var iter = Iterator([1,2,3]);

while(iter.hasNext()){
    console.log(iter.next());
}
于 2013-01-04T21:54:16.123 に答える
4

window.IteratorAFAIK は Firefox にのみ存在し、WebKit には存在しません。

于 2012-08-22T18:45:18.993 に答える
2
var makeIterator = function (collection, property) {
    var agg = (function (collection) {
    var index = 0;
    var length = collection.length;

    return {
      next: function () {
        var element;
          if (!this.hasNext()) {
            return null;
          }
          element = collection[index][property];
          index = index + 1;
          return element;
        },
      hasNext: function () {
        return index < length;
      },
      rewind: function () {
        index = 0;
      },
      current: function () {
        return collection[index];
      }
    };
 })(collection);

 return agg;
};


var iterator = makeIterator([5,8,4,2]);

console.log(iterator.current())//5
console.log(  iterator.next() )
console.log(iterator.current()) //8
console.log(iterator.rewind());
console.log(iterator.current()) //5
于 2014-07-07T07:47:53.930 に答える
0

クロムの場合、これを使用できます

var someArray = [1, 5, 7];
var someArrayEntries = someArray.entries();

ここにリンクがあります。興味深いと思います

于 2015-03-21T08:50:00.040 に答える