For-each σε έναν πίνακα σε JavaScript;

Πώς μπορώ να κάνω βρόχο σε όλες τις καταχωρήσεις ενός πίνακα χρησιμοποιώντας JavaScript;

Νόμιζα ότι ήταν κάτι τέτοιο:

forEach(instance in theArray)

Όπου theArray είναι ο πίνακας μου, αλλά αυτό φαίνεται να είναι λανθασμένο.

Σημείωση: Αυτή η απάντηση είναι απελπιστικά ξεπερασμένη. Για μια πιο σύγχρονη προσέγγιση, δείτε τις μεθόδους που είναι διαθέσιμες σε έναν πίνακα. Οι μέθοδοι που ενδιαφέρουν μπορεί να είναι οι εξής:

  • forEach
  • map
  • filter
  • zip
  • reduce
  • every
  • some

Ο συνήθης τρόπος επανάληψης ενός πίνακα στην JavaScript είναι ένας βανίλιος βρόχος "for":

var length = arr.length,
    element = null;
for (var i = 0; i < length; i++) {
  element = arr[i];
  // Do something with element
}

Σημειώστε, ωστόσο, ότι αυτή η προσέγγιση είναι καλή μόνο αν έχετε έναν πυκνό πίνακα και κάθε δείκτης καταλαμβάνεται από ένα στοιχείο. Αν ο πίνακας είναι αραιός, τότε μπορεί να αντιμετωπίσετε προβλήματα απόδοσης με αυτή την προσέγγιση, αφού θα επαναλαμβάνετε πολλούς δείκτες που πραγματικά δεν υπάρχουν στον πίνακα. Σε αυτή την περίπτωση, ένας βρόχος "for .. in" μπορεί να είναι καλύτερη ιδέα. Πάντως, θα πρέπει να χρησιμοποιήσετε τις κατάλληλες δικλείδες ασφαλείας για να διασφαλίσετε ότι μόνο οι επιθυμητές ιδιότητες του πίνακα (δηλαδή τα στοιχεία του πίνακα) θα ενεργούν, καθώς ο βρόχος for..in θα είναι επίσης απαριθμημένος σε παλαιούς φυλλομετρητές ή αν οι πρόσθετες ιδιότητες ορίζονται ως αριθμήσιμες.

Στο ECMAScript 5 θα υπάρχει μια μέθοδος forEach στο πρωτότυπο του πίνακα, αλλά δεν υποστηρίζεται από τους παλαιούς φυλλομετρητές. Έτσι, για να μπορέσετε να τη χρησιμοποιήσετε με συνέπεια πρέπει είτε να έχετε ένα περιβάλλον που την υποστηρίζει (για παράδειγμα, Node.js για JavaScript από την πλευρά του διακομιστή), είτε να χρησιμοποιήσετε ένα "Polyfill". Το Polyfill για αυτή τη λειτουργικότητα είναι, ωστόσο, τετριμμένο και δεδομένου ότι κάνει τον κώδικα πιο ευανάγνωστο, είναι ένα καλό polyfill που πρέπει να συμπεριληφθεί.

Σχόλια (4)

Αν θέλετε να κάνετε βρόχο σε έναν πίνακα, χρησιμοποιήστε τον τυπικό βρόχο τριών τμημάτων for.

for (var i = 0; i < myArray.length; i++) {
    var arrayItem = myArray[i];
}

Μπορείτε να επιτύχετε κάποιες βελτιστοποιήσεις απόδοσης με την προσωρινή αποθήκευση του myArray.length ή την επανάληψη πάνω από αυτόν προς τα πίσω.

Σχόλια (5)