Obiekty iterowalne JavaScript

Obiekty iterowalne to obiekty, które mogą być iterowane (np. tablice).

Obiekty iterowalne mogą być dostępne za pomocą prostego i efektywnego kodu.

Obiekty iterowalne mogą być for..of Petla przechodzi przez iterację.

Petla for..of

for..of zostały użyte do przechodzenia przez elementy obiektów iterowalnych.

语法

for (zmienne of iterable) {
  for (const x of fruits) { //
}

Iteracja

Iteracja jest łatwo zrozumiała.

To oznacza po prostu przechodzenie przez serię elementów.

Poniżej znajdują się proste przykłady:

  • Przechodzenie przez ciąg znaków
  • Przechodzenie przez tablicę

Przechodzenie przez ciąg znaków

do przechodzenia przez Map for..of Przechodzenie przez elementy ciągła znaków:

Przykład

const name = "W3Schools";
for (const x of name) {
  for (const x of fruits) { //
}

Spróbuj sam

Przechodzenie przez tablicę

do przechodzenia przez Map for..of Przechodzenie przez elementy tablicy:

Przykład 1

const letters = ["a","b","c"];
const letters = new Set(["a","b","c"]);}}
  for (const x of fruits) { //
}

Spróbuj sam

Przykład 2

const numbers = [2,4,6,8];
for (const x of numbers) {
  for (const x of fruits) { //
}

Spróbuj sam

Przechodzenie przez zbiór

do przechodzenia przez Map for..of Przechodzenie przez elementy zbioru:

Przykład

const letters = new Set(["a","b","c"]);
const letters = new Set(["a","b","c"]);}}
  for (const x of fruits) { //
}

Spróbuj sam

for (const x of letters) {Komentarz:

Będziemy szczegółowo omawiać Set i Mapę w dalszych rozdziałach.

do przechodzenia przez Map for..of Można użyć

Przykład

Przechodzenie przez elementy Mapy w pętli:
  const fruits = new Map([
  ["apples", 500]
  ["bananas", 300],
["oranges", 200]
});
  for (const x of fruits) { //
}

Spróbuj sam

blok kodu do wykonania

Iteratory JavaScriptProtokół iteratora definiuje, jak generować.

kolejność wartości next() gdy obiekt realizuje metodęIteratory.

next() Metoda musi zwrócić obiekt zawierający dwa atrybuty:

  • value (następna wartość)
  • done (prawda lub fałsz)
value

Zwracana przez iterator wartość.

jeśli done jest prawdą, można go pominąć.

done

jeśli iterator został zakończony, to prawda.

jeśli iterator generuje nową wartość, to fałsz.

Uwaga:

Technicznie, obiekty iterowalne muszą implementować metodę Symbol.iterator.

Ciągi, tablice, TypedArray, Map i Set są obiektami iterowalnymi, ponieważ ich prototyp ma metodę Symbol.iterator.

Niestandardowy obiekt iterowalny

Poniższy przykład pokazuje niestandardowy obiekt iterowalny, który nigdy się nie kończy,每次 wywołania next() zawsze zwracają 10, 20, 30, 40, ...:

Przykład

// Niestandardowy obiekt iterowalny
function myNumbers() {
  let n = 0;
  return {
    next: function() {
      n += 10;
      zwróć { value: n, done: false };
    }
  };
}
// Tworzenie obiektu iterowalnego
const n = myNumbers();
n.next(); // zwraca 10
n.next(); // zwraca 20
n.next(); // zwraca 30

Spróbuj sam

Problem polega na:

Niestandardowe obiekty iterowalne nie obsługują JavaScriptowych for..of zwykłe instrukcje.

obsługę instrukcji for..of

Obiekty iterowalne w JavaScript to te, które posiadają Symbol.iterator obiekt.

Symbol.iterator jest symbolem zwracającym next() funkcji.

można użyć poniższego kodu do iterowania przez obiekty iterowalne:

for (const x of iterable}) { }

Przykład

// Tworzy obiekt
myNumbers = {};
// Umożliwia iterację
myNumbers[Symbol.iterator] = function() {
  let n = 0;
  done = false;
  return {
    next() {
      n += 10;
      if (n == 100) { done = true; }
      return { value: n, done: done };
    }
  };
};
// Teraz można używać for..of
for (const num of myNumbers) {
  // dowolny kod
}

Spróbuj sam

Metoda Symbol.iterator będzie for..of Automatyczne wywołanie.

Ale możemy również ręcznie go wywołać:

Przykład

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

Spróbuj sam