Iterable JavaScript
Iterovatelné objekty jsou objekty, které lze iterovat pomocí for..of
.
Technicky, iterables musí implementovat Symbol.iterator
metodu.
Iterace přes řetězec
for..of
K iteraci prvků řetězce můžete použít smyčku:
Příklad
for (const x of "W3Schools") {
// code block to be executed
}
Iterace přes pole
for..of
K iteraci přes prvky pole můžete použít smyčku:
Příklad
for (const x of [1,2,3,4,5] {
// code block to be executed
}
Iterátory JavaScriptu
Protokol iterátoru definuje, jak vytvořit sekvenci hodnot z objektu.
Objekt se stává iterátorem , když implementuje next()
metodu.
Metoda next()
musí vrátit objekt se dvěma vlastnostmi:
- hodnota (další hodnota)
- hotovo (pravda nebo nepravda)
hodnota | Hodnota vrácená iterátorem (lze vynechat, pokud je hotovo) |
---|---|
Hotovo |
true , pokud iterátor dokončil false , pokud iterátor vytvořil novou hodnotu |
Home Made Iterable
Tato iterovatelná vrací nikdy nekončící: 10,20,30,40,.... Everytime
next()
se nazývá:
Příklad
// 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
Problém s podomácku vyrobeným iterovatelným:
Nepodporuje příkaz JavaScript for..of
.
Iterovatelný JavaScript je objekt, který má Symbol.iterator .
The Symbol.iterator
je funkce, která vrací next()
funkci.
Iterovatelný lze iterovat pomocí kódu:for (const x of iterable) { }
Příklad
// 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};
}
};
}
Nyní můžete použítfor..of
for (const num of myNumbers) {
// Any Code Here
}
Metoda Symbol.iterator je volána automaticky pomocí for..of
.
Ale můžeme to udělat i "ručně":
Příklad
let iterator = myNumbers[Symbol.iterator]();
while (true) {
const result = iterator.next();
if (result.done) break;
// Any Code Here
}