Skapa ett itererbart objekt i JavaScript
Låt oss skapa ett riktigt itererbart
objekt som kan itereras över
med en for-of-loop. För att göra detta
måste objektet ha en motsvarande
funktion i Symbol.iterator.
Låt oss implementera det. Antag att vi har följande objekt:
let obj = {
a: 1,
b: 2,
c: 3,
};
Lägg till en funktion i Symbol.iterator:
obj[Symbol.iterator] = function() {
}
Gör om denna funktion till en generator:
obj[Symbol.iterator] = function *() {
}
Inuti vår funktion kommer this att referera
till själva objektet:
obj[Symbol.iterator] = function *() {
console.log(this); // själva objektet
}
Låt oss iterera över objektet i iteratorn:
obj[Symbol.iterator] = function *() {
for (let key in this) {
yield obj[key];
}
}
Klart, objektet kan nu itereras över med en
for-of-loop:
for (let elem of obj) {
console.log(elem); // 1, 2, 3
}
Skapa ett objekt som kan itereras över
med en for-of-loop. Låt loop-elementet
vara ett objekt där nyckeln key
innehåller nyckeln från det itererbara
objektet, och nyckeln val innehåller värdet.
Exempel:
let obj = {a: 1, b: 2, c: 3};
for (let elem of obj) {
console.log(elem);
}
Kommer att skriva ut:
{key: 'a', val: 1}
{key: 'b', val: 2}
{key: 'c', val: 3}