JavaScript iterabla objekt

Itererbart objekt är objekt som kan itereras (t.ex. arrayer).

Itererbart objekt kan nås genom enkel och effektiv kod.

Itererbart objekt kan användas for..of Loopar genom att iterera.

for..of-loop

for..of används för att iterera över elementen i ett itererbart objekt.

Syntax

for (variable of iterable) {
  för (const x av frukter) { //
}

Iterering

Iterering är lätt att förstå.

Det betyder bara att iterera över en serie element.

Nedan är några enkla exempel:

  • Iterera över en sträng
  • Iterera över en array

Iterera över en sträng

för att iterera över Map for..of Iterera över elementen i en sträng:

Example

const name = "W3Schools";
for (const x of name) {
  för (const x av frukter) { //
}

Try it yourself

Iterera över en array

för att iterera över Map for..of Iterera över elementen i en array:

Exempel 1

const letters = ["a","b","c"];
const bokstäver = new Set(["a","b","c"]);
  för (const x av frukter) { //
}

Try it yourself

Exempel 2

const numbers = [2,4,6,8];
for (const x of numbers) {
  för (const x av frukter) { //
}

Try it yourself

Iterera över en Set

för att iterera över Map for..of Iterera över elementen i en Set:

Example

const letters = new Set(["a","b","c"]);
const bokstäver = new Set(["a","b","c"]);
  för (const x av frukter) { //
}

Try it yourself

för (const x av bokstäver) {Kommentar:

Vi kommer att detaljera Set och Map i följande kapitel.

för att iterera över Map for..of Man kan använda

Example

Loopa igenom Map-elementen:
  const frukter = new Map([
  ["äpplen", 500],
  ["bananer", 300],
["apelsiner", 200]
]);
  för (const x av frukter) { //
}

Try it yourself

att köra kodblock

JavaScript iteratorprotokoll definierar hur man genererar.

en rad värden next() när ett objekt implementerariterator.

next() metoden måste returnera ett objekt som innehåller två egenskaper:

  • value (nästa värde)
  • done (true eller false)
value

värdet iteratorn returnerar.

om done är true, kan det utelämnas.

done

om iteratorn är klar, är det true.

om iteratorn genererar en ny värde, är det false.

Observera:

Tekniskt sett måste itererbara objekt implementera Symbol.iterator-metoden.

Strängar, arrayer, TypedArray, Map och Set är itererbara objekt eftersom deras prototypobjekt har Symbol.iterator-metoden.

Anpassad itererbar objekt

Nedan visas ett exempel på en anpassad itererbar objekt som aldrig slutar, varje gång den anropas next() ska alltid returnera 10, 20, 30, 40, ...:

Example

// Anpassad itererbar objekt
function myNumbers() {
  let n = 0;
  return {
    next: function() {
      n += 10;
      return { value: n, done: false };
    }
  };
}
// Skapa en itererbar objekt
const n = myNumbers();
n.next(); // Returnerar 10
n.next(); // Returnerar 20
n.next(); // Returnerar 30

Try it yourself

Problemet är:

Anpassade itererbara objekt stöder inte JavaScripts for..of förklaring.

stödjer för..of-satsen.

JavaScript itererbara objekt är de som har Symbol.iterator objekt.

Symbol.iterator är en som returnerar next() funktionen.

kan följande kod användas för att iterera över en itererbar objekt:

för (const x of iterable}) { }

Example

// 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 };
    }
  };
};
// Now you can use for..of
for (const num of myNumbers) {
  // Any code
}

Try it yourself

The Symbol.iterator method will be for..of Automatic call.

But we can also call it manually:

Example

let iterator = myNumbers[Symbol.iterator]();
while (true) {
  const result = iterator.next();
  if (result.done) break;
  // Any code
}

Try it yourself