導入
イテレータモード:オブジェクトの内部表現を公開せずに、個々の要素を集約オブジェクトに注文する方法を提供します。
反復因子のいくつかの特性は次のとおりです。
1.内部表現を公開することなく、集約オブジェクトの内容にアクセスします。
2。さまざまな収集構造を通過するための統一されたインターフェイスを提供し、それにより同じアルゴリズムをサポートして、異なるコレクション構造で動作します。
3.トラバース中にイテレーターが配置されているコレクション構造を変更すると、問題が発生する可能性があります(たとえば、c#のforeachでアイテムを変更することはできません)。
文章
一般的に、すべてのオブジェクトを通過できるように、少なくとも2つのメソッド、HasNext()とNext()が必要です。最初に例を挙げましょう:
コードコピーは次のとおりです。
var agg =(function(){
var index = 0、
データ= [1、2、3、4、5]、
length = data.length;
戻る {
次:function(){
var Element;
if(!this.hasnext()){
nullを返します。
}
element = data [index];
index = index + 2;
返品要素。
}、
hasnext:function(){
return index <length;
}、
巻き戻し:function(){
index = 0;
}、
現在:function(){
データを返す[index];
}
};
}());
使用方法はC#と同じです。
コードコピーは次のとおりです。
//反復の結果は次のとおりです。1、3、5
while(agg.hasnext()){
console.log(agg.next());
}
もちろん、追加の方法でデータをリセットしてから、他の操作を続行することもできます。
コードコピーは次のとおりです。
//リセット
agg.rewind();
console.log(agg.current()); // 1
jQueryアプリケーションの例
jQueryの非常に有名なイテレーターは、$ .eachメソッドです。それぞれを通じて、追加の関数を渡してから、すべてのアイテムを繰り返すことができます。たとえば、:
コードコピーは次のとおりです。
$ .each(['dudu'、 'dudu'、 'yogurt little girl'、 'that mm']、function(index、value){
console.log(index + ':' + value);
});
//または
$( 'li')。各(function(index){
console.log(index + ':' + $(this).text());
});
要約します
Iteratorの使用シナリオは次のとおりです。セットの結果は、しばしば異なる方法で異なります。内部構造を公開したくありませんが、クライアントコードに要素に透過的にアクセスさせます。この場合、イテレーターモードを使用できます。