JavaScriptIterables
反復可能なオブジェクトは、で反復できるオブジェクトですfor..of
。
技術的には、iterablesはSymbol.iterator
メソッドを実装する必要があります。
文字列を反復処理する
ループを使用してfor..of
、文字列の要素を反復処理できます。
例
for (const x of "W3Schools") {
// code block to be executed
}
配列の反復
ループを使用してfor..of
、配列の要素を反復処理できます。
例
for (const x of [1,2,3,4,5] {
// code block to be executed
}
JavaScriptイテレータ
イテレータプロトコルは、オブジェクトから一連の値を生成する方法を定義します。
オブジェクトは、メソッドを実装するときにイテレータnext()
になります。
このnext()
メソッドは、次の2つのプロパティを持つオブジェクトを返す必要があります。
- 値(次の値)
- 完了(trueまたはfalse)
価値 | イテレータによって返される値 (doneがtrueの場合は省略できます) |
---|---|
終わり |
イテレータが完了した場合はtrueイテレータが新しい値を生成した場合は false |
自家製反復可能
この反復可能なリターンは終わりがありません:10、20、30、40、....毎回
next()
呼び出されます:
例
// Home Made Iterable
function myNumbers() {
let n = 0;
return {
next: function() {
n += 10;
return {value:n, done:false};
}
};
}
// Create Iterable
const n = myNumbers();
n.next(); // Returns 10
n.next(); // Returns 20
n.next(); // Returns 30
家の問題は反復可能になりました:
for..of
JavaScriptステートメントはサポートしていません。
JavaScript iterableは、 Symbol.iteratorを持つオブジェクトです。
はSymbol.iterator
関数を返すnext()
関数です。
iterableは、次のコードで繰り返すことができます。 for (const x of iterable) { }
例
// Create an Object
myNumbers = {};
// Make it Iterable
myNumbers[Symbol.iterator] = function() {
let n = 0;
done = false;
return {
next() {
n += 10;
if (n == 100) {done = true}
return {value:n, done:done};
}
};
}
今、あなたは使用することができます for..of
for (const num of myNumbers) {
// Any Code Here
}
Symbol.iteratorメソッドは、によって自動的に呼び出されますfor..of
。
ただし、「手動で」実行することもできます。
例
let iterator = myNumbers[Symbol.iterator]();
while (true) {
const result = iterator.next();
if (result.done) break;
// Any Code Here
}