Ενεργά αντικείμενα JavaScript
Τα αναγώγιμα αντικείμενα είναι αντικείμενα που μπορούν να επαναληφθούν (όπως πίνακες).
Τα αναγώγιμα αντικείμενα μπορούν να προσπελάονται με απλό και αποδοτικό κώδικα.
Τα αναγώγιμα αντικείμενα μπορούν να χρησιμοποιηθούν for..of
Ο κύκλος επαναλαμβάνεται για επαναληπτική διαδικασία.
For..of κύκλος
for..of
Η πρόταση χρησιμοποιείται για την περιήγηση των στοιχείων ενός αναγώγιμου αντικειμένου.
Γλώσσα
for (variable του αντικείμενο) { for (const x of fruits) { // }
Επαναληπτική διαδικασία
Η επαναληπτική διαδικασία είναι εύκολα κατανοητή.
Αυτό σημαίνει απλώς περιήγηση μιας σειράς στοιχείων.
Ακολουθούν μερικά απλά παραδείγματα:
- Περιηγητές της αλφαβητικής συμβολοσειράς
- Περιηγητές στο πίνακα
Περιηγητές της αλφαβητικής συμβολοσειράς
περιηγηθείτε στο Map for..of
Παράξενοι περιηγητές στο στοιχεία της αλφαβητικής συμβολοσειράς:
Παράδειγμα
const name = "W3Schools"; for (const x of name) { for (const x of fruits) { // }
Περιηγητές στο πίνακα
περιηγηθείτε στο Map for..of
Παράξενοι περιηγητές στο στοιχεία του πίνακα:
Παράδειγμα 1
const letters = ["a","b","c"]; const letters = new Set(["a","b","c"]); for (const x of fruits) { // }
Παράδειγμα 2
const numbers = [2,4,6,8]; for (const x of numbers) { for (const x of fruits) { // }
Περιηγητές στο Σετ
περιηγηθείτε στο Map for..of
Παράξενοι περιηγητές στο στοιχεία του Σετ:
Παράδειγμα
const letters = new Set(["a","b","c"]); const letters = new Set(["a","b","c"]); for (const x of fruits) { // }
for (const x of letters) {Σημείωση:
Θα εξετάσουμε λεπτομερώς τους Set και τα Map στις επόμενες ενότητες.
περιηγηθείτε στο Map for..of
Μπορείτε να χρησιμοποιήσετε
Παράδειγμα
Περιηγηθείτε στα στοιχεία του Map: const fruits = new Map([ ["apples", 500], ["bananas", 300], ["oranges", 200] }); for (const x of fruits) { // }
Το κώδικα που πρέπει να εκτελεστεί
Αναγνωριστές του JavaScriptΟ αναγνωριστής протόκολλος ορίζει πώς να δημιουργηθούν τιμές από το αντικείμενο..
μια σειρά τιμών next()
όταν το αντικείμενο υλοποιεί τη μέθοδοΑναγνωριστής.
next()
Η μέθοδος πρέπει να επιστρέφει ένα αντικείμενο που περιέχει δύο ιδιότητες:
- value (η επόμενη τιμή)
- done (true ή false)
value |
Η τιμή που επιστρέφει ο αναγνωριστής. Αν το done είναι true, μπορεί να παραλειφθεί. |
done |
είναι true αν ο αναγνωριστής έχει ολοκληρωθεί. είναι false αν ο αναγνωριστής δημιουργεί νέες τιμές. |
Σημείωση:
Τεχνολογικά, τα αντικείμενα αναγνωριστές πρέπει να υλοποιούν το σύμβολο Symbol.iterator.
Τα strings, τα arrays, τα TypedArray, τα Map και τα Set είναι αναγνωριστές, γιατί τα πρωτότυπα τους έχουν το σύμβολο Symbol.iterator.
Αναγνωριστήριος που δημιουργείται από το χρήστη
Το παρακάτω παράδειγμα δείχνει έναν αναγνωριστή που δημιουργείται από το χρήστη, ο οποίος δεν θα τελειώσει ποτέ, κάθε φορά που καλείται next()
θα επιστρέφουν πάντα 10, 20, 30, 40, ...:
Παράδειγμα
// Δημιουργία αναγνωριστή από το χρήστη function myNumbers() { let n = 0; return { next: function() { n += 10; επιστρέφει { value: n, done: false }; } }; } // Δημιουργία αντικειμένου αναγνωριστή const n = myNumbers(); n.next(); // Επιστρέφει 10 n.next(); // Επιστρέφει 20 n.next(); // Επιστρέφει 30
Το πρόβλημα είναι:
Τα αναγνωριστήρια που δημιουργούνται από το χρήστη δεν υποστηρίζουν τον JavaScript for..of
συμβούλου.
υποστήριξη αναγνωριστών for..of
Τα αντικείμενα αναγνωριστές του JavaScript είναι αυτά που έχουν Symbol.iterator του αντικειμένου.
Symbol.iterator είναι ένας αναγνωριστής που επιστρέφει next()
λειτουργίας.
μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα για την αναγνώριση των αναγνωριστών:
για (const x του αντικείμενο}) { }
Παράδειγμα
// Δημιουργούμε έναν αντικείμενο myNumbers = {}; // Τον κάνουμε αναγνωρίσιμο ως αναγνωρίσιμο myNumbers[Symbol.iterator] = function() { let n = 0; done = false; return { next() { n += 10; if (n == 100) { done = true; } return { value: n, done: done }; } }; }; // Τώρα μπορείτε να χρησιμοποιήσετε το for..of for (const num of myNumbers) { // Οποιαδήποτε κώδικας }
Το Symboι iterator θα καλείται for..of
Αυτόματη κλήση.
Αλλά μπορούμε να το καλέσουμε χειροκίνητα επίσης:
Παράδειγμα
let iterator = myNumbers[Symbol.iterator](); while (true) { const result = iterator.next(); if (result.done) break; // Οποιαδήποτε κώδικας }