Obiekty iterowalne JavaScript
- Poprzednia strona JS Przerwanie
- Następna strona JS Set
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) { // }
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) { // }
Przykład 2
const numbers = [2,4,6,8]; for (const x of numbers) { for (const x of fruits) { // }
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) { // }
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) { // }
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
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 }
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 }
- Poprzednia strona JS Przerwanie
- Następna strona JS Set