JavaScript Iteratorer och Iterables

I den här handledningen lär du dig om JavaScript-iteratorer och iterables med hjälp av exempel.

JavaScript Iterables och Iterators

JavaScript ger ett protokoll för att iterera över datastrukturer. Detta protokoll definierar hur dessa datastrukturer itereras över med hjälp av for… ofslingan.

Konceptet för protokollet kan delas upp i:

  • iterabel
  • iterator

Iterabelprotokollet nämner att en iterabel ska ha Symbol.iteratornyckeln.

Justeringar av JavaScript

Datastrukturerna som har Symbol.iterator()metoden kallas iterables. Till exempel Arrays, Strings, Sets, etc.

JavaScript Iteratorer

En iterator är ett objekt som returneras med Symbol.iterator()metoden.

Iteratorprotokollet tillhandahåller next()metoden för åtkomst till varje element i iterabeln (datastruktur) en i taget.

Låt oss titta på ett exempel på iterables som har Symbol.Iterator()

 const arr = (1, 2 ,3); // calling the Symbol.iterator() method const arrIterator = arr(Symbol.iterator)(); // gives Array Iterator console.log(arrIterator); const str = 'hello'; // calling the Symbol.iterator() method const strIterator = str(Symbol.iterator)(); // gives String Iterator console.log(strIterator);

Produktion

 Array Iterator () StringIterator ()

Här återkallar Symbol.iterator()metoden för både matrisen och strängen sina respektive iteratorer.

Iterera genom Iterables

Du kan använda for… ofslingan för att itera igenom dessa iterabla objekt. Du kan itera igenom Symbol.iterator()metoden så här:

 const number = ( 1, 2, 3); for (let n of number(Symbol.iterator)()) ( console.log(n); )

Produktion

 1 2 3

Eller så kan du helt enkelt itera genom matrisen så här:

 const number = ( 1, 2, 3); for (let n of number) ( console.log(n); )

Här tillåter iteratorn for… ofslingan att iterera över en matris och returnera varje värde.

JavaScript nästa () Metod

Iteratorobjektet har en next()metod som returnerar nästa objekt i sekvensen.

Den next()metod innehåller två egenskaper: valueoch done.

  • värde
    Den valueegenskapen kan vara av vilken typ av data och representerar det aktuella värdet i sekvensen.
  • gjort
    i donefastigheten är ett booleskt värde som anger om iterationen är klar eller inte. Om iterationen är ofullständig är doneegenskapen inställd på false, annars är den inställd på true.

Låt oss titta på ett exempel på array-iterables:

 const arr = ('h', 'e', 'l', 'l', 'o'); let arrIterator = arr(Symbol.iterator)(); console.log(arrIterator.next()); // (value: "h", done: false) console.log(arrIterator.next()); // (value: "e", done: false) console.log(arrIterator.next()); // (value: "l", done: false) console.log(arrIterator.next()); // (value: "l", done: false) console.log(arrIterator.next()); // (value: "o", done: false) console.log(arrIterator.next()); // (value: undefined, done: true)

Du kan ringa next()upprepade gånger för att itera över ett arrIteratorobjekt.

  • Den next()metoden returnerar ett objekt med två egenskaper: valueoch done.
  • När next()metoden når slutet av sekvensen är doneegenskapen inställd på false.

Låt oss titta på hur for… ofloop kör programmet ovan. Till exempel,

 const arr = ('h', 'e', 'l', 'l', 'o'); for (let i of arr) ( console.log(i); )

Produktion

 Hej

Den for… ofslinga gör exakt samma som programmet ovan.

Den for… ofslingan håller ringa next()metoden på iterator. När den når done:trueden for… ofavslutar slingan.

Användardefinierad Iterator

Du kan också skapa din egen iterator och ringa för next()att komma åt nästa element. Till exempel,

 function displayElements(arr) ( // to update the iteration let n = 0; return ( // implementing the next() function next() ( if(n < arr.length) ( return ( value: arr(n++), done: false ) ) return ( value: undefined, done: true ) ) ) ) const arr = ('h', 'e', 'l', 'l', 'o'); const arrIterator = displayElements(arr); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next());

Produktion

 (värde: "h", gjort: falskt) (värde: "e", gjort: falskt) (värde: "l", gjort: falskt) (värde: "l", gjort: falskt) (värde: "o" , gjort: falskt) (värde: odefinierat, gjort: sant)

I ovanstående program har vi skapat en egen iterator. De displayElements()funktionen returnerar valueoch doneegendom.

  • Varje gång next()metoden anropas körs funktionen en gång och visar värdet på en matris.
  • Slutligen, när alla element i en matris är förbrukade, är doneegenskapen inställd på true, med valuesom undefined.

Intressanta artiklar...