Ενεργά αντικείμενα 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;
  // Οποιαδήποτε κώδικας
}

Δοκιμάστε το προσωπικά