JavaScript Iterables
Itereerbare voorwerpe is voorwerpe wat oor herhaal kan word met for..of
.
Tegnies moet iterables die Symbol.iterator
metode implementeer.
Itereer oor 'n snaar
Jy kan 'n for..of
lus gebruik om oor die elemente van 'n string te herhaal:
Voorbeeld
for (const x of "W3Schools") {
// code block to be executed
}
Itereer oor 'n skikking
Jy kan 'n for..of
lus gebruik om oor die elemente van 'n Skikking te herhaal:
Voorbeeld
for (const x of [1,2,3,4,5] {
// code block to be executed
}
JavaScript Iterators
Die iteratorprotokol definieer hoe om 'n reeks waardes uit 'n voorwerp te produseer.
'n Voorwerp word 'n iterator wanneer dit 'n next()
metode implementeer.
Die next()
metode moet 'n voorwerp met twee eienskappe terugstuur:
- waarde (die volgende waarde)
- gedoen (waar of onwaar)
waarde | Die waarde wat deur die iterator teruggestuur word (Kan weggelaat word as dit waar is) |
---|---|
gedoen |
waar as die iterator onwaar voltooi het as die iterator 'n nuwe waarde geproduseer het |
Tuisgemaakte Iterable
Hierdie herhaalbare opbrengste eindig nooit: 10,20,30,40, .... Everytime
next()
word genoem:
Voorbeeld
// 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
Die probleem met 'n tuisgemaakte herhaalbaar:
Dit ondersteun nie die JavaScript- for..of
stelling nie.
'n JavaScript iterable is 'n voorwerp wat 'n Symbol.iterator het .
Die Symbol.iterator
is 'n funksie wat 'n funksie terugstuur next()
.
'n Herhaalbare kan herhaal word met die kode:for (const x of iterable) { }
Voorbeeld
// 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};
}
};
}
Nou kan jy gebruikfor..of
for (const num of myNumbers) {
// Any Code Here
}
Die Symbol.iterator-metode word outomaties deur for..of
.
Maar ons kan dit ook "handmatig" doen:
Voorbeeld
let iterator = myNumbers[Symbol.iterator]();
while (true) {
const result = iterator.next();
if (result.done) break;
// Any Code Here
}