Πίνακες σε javascript με απλά λόγια. ▍ Δυνατά σημεία της μεθόδου every().

Αυτο 13.08.2019
Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

Chercher

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

Τα ευρετήρια συστοιχιών JavaScript ξεκινούν από το μηδέν και χρησιμοποιούν ακέραιους αριθμούς 32 bit - το πρώτο στοιχείο του πίνακα έχει δείκτη 0. Οι πίνακες JavaScript είναι δυναμικοί: μπορούν να αυξηθούν και να συρρικνωθούν σε μέγεθος ανάλογα με τις ανάγκες. δεν χρειάζεται να δηλώνετε σταθερά μεγέθη πίνακα κατά τη δημιουργία τους ή να εκχωρείτε εκ νέου μνήμη όταν αλλάζουν τα μεγέθη τους.

Οι πίνακες στο JavaScript είναι μια εξειδικευμένη μορφή αντικειμένων και οι δείκτες πινάκων σημαίνουν κάτι περισσότερο από απλά ονόματα ιδιοτήτων, τα οποία συμπτωματικά είναι ακέραιοι αριθμοί.

Δημιουργία Πίνακες

Ο ευκολότερος τρόπος για να δημιουργήσετε έναν πίνακα είναι να χρησιμοποιήσετε ένα κυριολεκτικό, το οποίο είναι μια απλή λίστα διαχωρισμένων με κόμματα στοιχείων πίνακα που περιβάλλεται από αγκύλες. Οι τιμές σε έναν πίνακα κυριολεκτικά δεν χρειάζεται να είναι σταθερές - μπορούν να είναι οποιεσδήποτε εκφράσεις, συμπεριλαμβανομένων των κυριολεκτικών αντικειμένων:

Var κενό = ; // Κενοί αριθμοί var πίνακα = ; // Πίνακας με πέντε αριθμητικά στοιχεία var misc = [ 1.1, true, "a", ]; // 3 στοιχεία διαφορετικών τύπων + ακραία κόμμα var base = 1024; var πίνακα = ; // Πίνακας με μεταβλητές var arrObj = [, ]; // 2 πίνακες μέσα που περιέχουν αντικείμενα

Η κυριολεκτική σύνταξη πίνακα σάς επιτρέπει να εισαγάγετε ένα προαιρετικό τελικό κόμμα, π.χ. το κυριολεκτικό [,] ταιριάζει με έναν πίνακα με δύο στοιχεία, όχι τρία.

Ένας άλλος τρόπος για να δημιουργήσετε έναν πίνακα είναι να καλέσετε τον κατασκευαστή Παράταξη(). Μπορείτε να καλέσετε τον κατασκευαστή με τρεις διαφορετικούς τρόπους:

    Καλέστε τον κατασκευαστή χωρίς ορίσματα:

    Var arr = new Array();

    Σε αυτήν την περίπτωση, θα δημιουργηθεί ένας κενός πίνακας, ισοδύναμος με τον κυριολεκτικό.

    Καλέστε τον κατασκευαστή με ένα μόνο αριθμητικό όρισμα που καθορίζει το μήκος του πίνακα:

    Var arr = νέος πίνακας (10);

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

    Καθορίστε ρητά τις τιμές των πρώτων δύο ή περισσότερων στοιχείων πίνακα ή ενός μη αριθμητικού στοιχείου στην κλήση του κατασκευαστή:

    Var arr = new Array(5, 4, 3, 2, 1, "test");

    Σε αυτήν την περίπτωση, τα ορίσματα στον κατασκευαστή γίνονται οι τιμές των στοιχείων του νέου πίνακα. Η χρήση κυριολεκτικών πινάκων είναι σχεδόν πάντα πιο εύκολη από τη χρήση του κατασκευαστή Array().

Ανάγνωση και γραφή στοιχείων πίνακα

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

// Δημιουργία πίνακα με ένα στοιχείο var arr = ["world"]; // Ανάγνωση στοιχείου 0 var value = arr; // Γράψτε την τιμή στο στοιχείο 1 arr = 3.14; // Γράψτε την τιμή στο στοιχείο 2 i = 2; arr[i] = 3; // Γράψτε την τιμή στο στοιχείο 3 arr = "hello"; // Διαβάστε τα στοιχεία 0 και 2, γράψτε την τιμή στο στοιχείο 3 arr] = arr;

Επιτρέψτε μου να σας υπενθυμίσω ότι οι πίνακες είναι ένας εξειδικευμένος τύπος αντικειμένου. Οι αγκύλες που χρησιμοποιούνται για την πρόσβαση σε στοιχεία πίνακα λειτουργούν ακριβώς το ίδιο με τις αγκύλες που χρησιμοποιούνται για την πρόσβαση στις ιδιότητες αντικειμένων. Ο διερμηνέας JavaScript μετατρέπει τα αριθμητικά ευρετήρια σε παρενθέσεις σε συμβολοσειρές—το ευρετήριο 1 γίνεται η συμβολοσειρά «1»—και στη συνέχεια χρησιμοποιεί τις συμβολοσειρές ως ονόματα ιδιοτήτων.

Δεν υπάρχει τίποτα ιδιαίτερο στη μετατροπή αριθμητικών ευρετηρίων σε συμβολοσειρές: μπορείτε να κάνετε το ίδιο με κανονικά αντικείμενα:

Var obj = (); // Δημιουργία απλού αντικειμένου obj = "one"; // Ευρετηριάστε το με ακέραιους αριθμούς

Το θέμα με τους πίνακες είναι ότι όταν χρησιμοποιείτε ονόματα ιδιοτήτων που είναι μη αρνητικοί ακέραιοι, οι πίνακες καθορίζουν αυτόματα την τιμή της ιδιότητας μήκος. Για παράδειγμα, παραπάνω δημιουργήσαμε έναν πίνακα πίνακα με ένα μόνο στοιχείο. Στη συνέχεια εκχώρησε τιμές στα στοιχεία του στους δείκτες 1, 2 και 3. Ως αποτέλεσμα αυτών των πράξεων, η τιμή της ιδιότητας μήκους του πίνακα άλλαξε σε 4.

Θα πρέπει να διακρίνετε σαφώς τα ευρετήρια σε έναν πίνακα από τα ονόματα ιδιοτήτων αντικειμένων. Όλοι οι δείκτες είναι ονόματα ιδιοτήτων, αλλά μόνο οι ιδιότητες με ονόματα που αντιπροσωπεύονται από ακέραιους αριθμούς είναι δείκτες. Όλοι οι πίνακες είναι αντικείμενα και μπορείτε να προσθέσετε ιδιότητες σε αυτούς με οποιοδήποτε όνομα. Ωστόσο, εάν αγγίξετε ιδιότητες που είναι δείκτες πίνακα, οι πίνακες αποκρίνονται ενημερώνοντας την τιμή της ιδιότητας μήκος όπως απαιτείται.

Λάβετε υπόψη ότι αρνητικοί και μη ακέραιοι αριθμοί μπορούν να χρησιμοποιηθούν ως δείκτες πίνακα. Σε αυτήν την περίπτωση, οι αριθμοί μετατρέπονται σε συμβολοσειρές, οι οποίες χρησιμοποιούνται ως ονόματα ιδιοτήτων.

Προσθήκη και αφαίρεση στοιχείων πίνακα

Έχουμε ήδη δει ότι ο ευκολότερος τρόπος για να προσθέσετε στοιχεία σε έναν πίνακα είναι να εκχωρήσετε τιμές σε νέους δείκτες. Μπορείτε επίσης να χρησιμοποιήσετε τη μέθοδο για να προσθέσετε ένα ή περισσότερα στοιχεία στο τέλος του πίνακα. Σπρώξτε():

Var arr = ; // Δημιουργία κενού πίνακα arr.push("zero"); // Προσθέστε μια τιμή στο τέλος arr.push("one",2); // Προσθέστε δύο ακόμη τιμές

Μπορείτε επίσης να προσθέσετε ένα στοιχείο στο τέλος του πίνακα εκχωρώντας μια τιμή στο στοιχείο arr. Για να εισαγάγετε ένα στοιχείο στην αρχή ενός πίνακα, μπορείτε να χρησιμοποιήσετε τη μέθοδο unshift(), το οποίο μετακινεί υπάρχοντα στοιχεία στον πίνακα σε θέσεις με υψηλότερους δείκτες.

Μπορείτε να διαγράψετε στοιχεία πίνακα χρησιμοποιώντας τον τελεστή διαγραφής, όπως ακριβώς και οι ιδιότητες κανονικών αντικειμένων:

Var arr = ; διαγραφή arr? 2 in arr? // false, ο δείκτης 2 στον πίνακα δεν ορίζεται arr.length. // 3: ο τελεστής διαγραφής δεν αλλάζει την ιδιότητα μήκος του πίνακα

Η κατάργηση ενός στοιχείου είναι παρόμοια (αλλά ελαφρώς διαφορετική) με την εκχώρηση της μη καθορισμένης τιμής σε αυτό το στοιχείο. Σημειώστε ότι η εφαρμογή του τελεστή διαγραφής σε ένα στοιχείο πίνακα δεν αλλάζει την τιμή της ιδιότητας μήκους ούτε μετατοπίζει προς τα κάτω στοιχεία με υψηλότερους δείκτες για να καλύψει το κενό που αφήνεται με τη διαγραφή του στοιχείου.

Είναι επίσης δυνατό να αφαιρεθούν στοιχεία στο τέλος ενός πίνακα αναθέτοντας απλώς μια νέα τιμή στην ιδιότητα μήκος. Οι πίνακες έχουν μια μέθοδο κρότος()(το αντίθετο της μεθόδου push()), που μειώνει το μήκος του πίνακα κατά 1 και επιστρέφει την τιμή του στοιχείου που αφαιρέθηκε. Υπάρχει και μέθοδος αλλαγή()(το αντίθετο της unshift()), που αφαιρεί το στοιχείο στην αρχή του πίνακα. Σε αντίθεση με τον τελεστή διαγραφής, η μέθοδος shift() μετατοπίζει όλα τα στοιχεία σε μια θέση κάτω από τον τρέχοντα δείκτη τους.

Τέλος, υπάρχει μια μέθοδος πολλαπλών χρήσεων συνδέω(), το οποίο σας επιτρέπει να εισάγετε, να διαγράψετε και να αντικαταστήσετε στοιχεία πίνακα. Αλλάζει την τιμή της ιδιότητας μήκος και μετατοπίζει στοιχεία πίνακα σε χαμηλότερους ή υψηλότερους δείκτες, όπως απαιτείται. Θα εξετάσουμε όλες αυτές τις μεθόδους λίγο αργότερα.

Πολυδιάστατοι πίνακες

Η JavaScript δεν υποστηρίζει "αληθινούς" πολυδιάστατους πίνακες, αλλά έχει έναν καλό τρόπο να τους προσομοιώνει χρησιμοποιώντας πίνακες πινάκων. Για να αποκτήσετε πρόσβαση σε ένα στοιχείο δεδομένων σε μια σειρά πινάκων, απλώς χρησιμοποιήστε τον τελεστή δύο φορές.

Για παράδειγμα, ας υποθέσουμε ότι η μεταβλητή μήτρα είναι ένας πίνακας από πίνακες αριθμών. Κάθε στοιχείο του πίνακα[x] είναι ένας πίνακας αριθμών. Για να αποκτήσετε πρόσβαση σε έναν συγκεκριμένο αριθμό σε έναν πίνακα, μπορείτε να χρησιμοποιήσετε την έκφραση matrix[x][y]. Ακολουθεί ένα συγκεκριμένο παράδειγμα όπου ένας δισδιάστατος πίνακας χρησιμοποιείται ως πίνακας πολλαπλασιασμού:

// Δημιουργία πολυδιάστατου πίνακα var table = new Array(10); // Υπάρχουν 10 σειρές στον πίνακα για(var i = 0; i

Μέθοδοι της κλάσης Array

Το πρότυπο ECMAScript 3 ορίζει το Array.prototype ως ένα σύνολο βολικών συναρτήσεων για εργασία με πίνακες, οι οποίες είναι διαθέσιμες ως μέθοδοι σε οποιονδήποτε πίνακα. Αυτές οι μέθοδοι θα παρουσιαστούν στις επόμενες υποενότητες.

μέθοδο join().

Η μέθοδος Array.join() μετατρέπει όλα τα στοιχεία του πίνακα σε συμβολοσειρές, τα ενώνει και επιστρέφει τη συμβολοσειρά που προκύπτει. Ως προαιρετικό όρισμα, μπορείτε να περάσετε μια συμβολοσειρά στη μέθοδο που θα χρησιμοποιηθεί για τον διαχωρισμό των στοιχείων στη συμβολοσειρά αποτελέσματος. Εάν δεν έχει καθοριστεί μια συμβολοσειρά οριοθέτησης, χρησιμοποιείται κόμμα. Για παράδειγμα, το ακόλουθο τμήμα έχει ως αποτέλεσμα τη συμβολοσειρά "1,2,3":

Var arr = ; arr.join(); // "1,2,3" arr.join("-"); // "1-2-3"

μέθοδος reverse().

Η μέθοδος Array.reverse() αντιστρέφει τη σειρά των στοιχείων σε έναν πίνακα και επιστρέφει έναν αναδιατεταγμένο πίνακα. Η μετάθεση εκτελείται απευθείας στον αρχικό πίνακα, δηλ. Αυτή η μέθοδος δεν δημιουργεί έναν νέο πίνακα με τα αναδιατεταγμένα στοιχεία, αλλά τα αναδιατάσσει σε έναν ήδη υπάρχοντα πίνακα. Για παράδειγμα, το ακόλουθο απόσπασμα, χρησιμοποιώντας τις μεθόδους reverse() και join(), έχει ως αποτέλεσμα τη συμβολοσειρά "3,2,1":

Var arr = ; arr.reverse().join(); // "3,2,1"

μέθοδος sort().

Η μέθοδος Array.sort() ταξινομεί τα στοιχεία στον πίνακα προέλευσης και επιστρέφει τον ταξινομημένο πίνακα. Εάν η μέθοδος sort() καλείται χωρίς ορίσματα, η ταξινόμηση γίνεται με αλφαβητική σειρά (τα στοιχεία μετατρέπονται προσωρινά σε συμβολοσειρές για σύγκριση εάν είναι απαραίτητο). Τα μη καθορισμένα στοιχεία μετακινούνται στο τέλος του πίνακα.

Για ταξινόμηση με άλλη σειρά εκτός από αλφαβητική, μπορείτε να περάσετε μια συνάρτηση σύγκρισης ως όρισμα στη μέθοδο sort(). Αυτή η συνάρτηση ορίζει ποια από τα δύο ορίσματά της θα πρέπει να είναι πρώτα στην ταξινομημένη λίστα. Εάν το πρώτο όρισμα πρέπει να προηγείται του δεύτερου, η συνάρτηση σύγκρισης πρέπει να επιστρέψει έναν αρνητικό αριθμό. Εάν το πρώτο όρισμα είναι να ακολουθεί το δεύτερο σε έναν ταξινομημένο πίνακα, τότε η συνάρτηση πρέπει να επιστρέψει έναν αριθμό μεγαλύτερο από το μηδέν. Και αν δύο τιμές είναι ισοδύναμες (δηλαδή, η σειρά τους δεν έχει σημασία), η συνάρτηση σύγκρισης θα πρέπει να επιστρέψει 0:

Var arr = ; arr.sort(); // Αλφαβητική σειρά: 1111, 222, 33, 4 arr.sort(function(a,b) ( // Αριθμητική σειρά: 4, 33, 222, 1111 return a-b; // Επιστρέφει 0 // ανάλογα με τη σειρά ταξινόμησης a και β)); // Ταξινόμηση προς την αντίθετη κατεύθυνση, από το μεγαλύτερο στο μικρότερο arr.sort(function(a,b) (return b-a));

Παρατηρήστε πόσο βολικό είναι να χρησιμοποιήσετε μια συνάρτηση χωρίς όνομα σε αυτό το απόσπασμα. Η συνάρτηση σύγκρισης χρησιμοποιείται μόνο εδώ, επομένως δεν χρειάζεται να της δώσετε όνομα.

μέθοδος concat().

Η μέθοδος Array.concat() δημιουργεί και επιστρέφει έναν νέο πίνακα που περιέχει τα στοιχεία του αρχικού πίνακα στον οποίο κλήθηκε η concat() και οι τιμές τυχόν ορισμάτων που μεταβιβάστηκαν στη concat(). Εάν κάποιο από αυτά τα ορίσματα είναι το ίδιο ένας πίνακας, τα στοιχεία του προστίθενται στον πίνακα που επιστρέφεται. Θα πρέπει να σημειωθεί, ωστόσο, ότι δεν υπάρχει αναδρομικός μετασχηματισμός ενός πίνακα πινάκων σε μονοδιάστατο πίνακα. Η μέθοδος concat() δεν αλλάζει τον αρχικό πίνακα. Παρακάτω είναι μερικά παραδείγματα:

Var arr = ; arr.concat(4, 5); // Επιστροφή arr.concat(); // Return arr.concat(,) // Return arr.concat(4, ]) // Return ]

μέθοδος slice().

Η μέθοδος Array.slice() επιστρέφει ένα slice ή υποπίνακα του καθορισμένου πίνακα. Τα δύο ορίσματα μεθόδου καθορίζουν την αρχή και το τέλος του επιστρεφόμενου τμήματος. Ο πίνακας που επιστράφηκε περιέχει το στοιχείο του οποίου ο αριθμός καθορίζεται στο πρώτο όρισμα, συν όλα τα επόμενα στοιχεία, μέχρι (αλλά δεν περιλαμβάνει) το στοιχείο του οποίου ο αριθμός καθορίζεται στο δεύτερο όρισμα.

Εάν δοθεί μόνο ένα όρισμα, ο πίνακας που επιστρέφεται περιέχει όλα τα στοιχεία από την αρχική θέση έως το τέλος του πίνακα. Εάν κάποιο από τα ορίσματα είναι αρνητικό, καθορίζει τον αριθμό του στοιχείου σε σχέση με το τέλος του πίνακα. Άρα, το όρισμα -1 αντιστοιχεί στο τελευταίο στοιχείο του πίνακα και το όρισμα -3 αντιστοιχεί στο τρίτο στοιχείο του πίνακα από το τέλος. Ακολουθούν μερικά παραδείγματα:

Var arr = ; arr.slice(0,3); // Επιστροφή arr.slice(3); // Επιστροφή arr.slice(1,-1); // Επιστροφή arr.slice(-3,-2); // Επιστροφή

μέθοδος splice().

Η μέθοδος Array.splice() είναι μια γενική μέθοδος που πραγματοποιεί εισαγωγή ή διαγραφή στοιχείων πίνακα. Σε αντίθεση με τις μεθόδους slice() και concat(), η μέθοδος splice() τροποποιεί τον αρχικό πίνακα στον οποίο κλήθηκε. Σημειώστε ότι οι μέθοδοι splice() και slice() έχουν πολύ παρόμοια ονόματα, αλλά εκτελούν εντελώς διαφορετικές λειτουργίες.

Η μέθοδος splice() μπορεί να αφαιρέσει στοιχεία από έναν πίνακα, να εισάγει νέα στοιχεία ή να κάνει και τα δύο ταυτόχρονα. Τα στοιχεία του πίνακα μετατοπίζονται όπως χρειάζεται για να δημιουργηθεί μια συνεχής ακολουθία μετά την εισαγωγή ή τη διαγραφή.

Το πρώτο όρισμα της μεθόδου splice() καθορίζει τη θέση στον πίνακα από την οποία θα πραγματοποιηθεί η εισαγωγή και/ή η διαγραφή. Το δεύτερο όρισμα καθορίζει τον αριθμό των στοιχείων που πρέπει να αφαιρεθούν (κοπούν) από τον πίνακα. Εάν παραλειφθεί το δεύτερο όρισμα, αφαιρούνται όλα τα στοιχεία πίνακα από το καθορισμένο έως το τέλος του πίνακα. Η μέθοδος splice() επιστρέφει έναν πίνακα με τα στοιχεία που αφαιρέθηκαν ή (αν δεν αφαιρέθηκαν στοιχεία) έναν κενό πίνακα.

Τα δύο πρώτα ορίσματα στη μέθοδο splice() καθορίζουν τα στοιχεία του πίνακα που θα αφαιρεθούν. Αυτά τα ορίσματα μπορούν να ακολουθηθούν από οποιονδήποτε αριθμό πρόσθετων ορισμάτων που καθορίζουν τα στοιχεία που θα εισαχθούν στον πίνακα, ξεκινώντας από τη θέση που καθορίζεται στο πρώτο όρισμα.

Var arr = ; arr.splice(4); // Return , arr = arr.splice(1,2); // Return , arr = arr.splice(1,1); // Επιστροφή ; arr = arr = ; arr.splice(2,0"a","b"); // Επιστροφή ; αρρ =

μεθόδους push() και pop().

Οι μέθοδοι push() και pop() σάς επιτρέπουν να εργάζεστε με πίνακες σαν να ήταν στοίβες. Η μέθοδος push() προσθέτει ένα ή περισσότερα νέα στοιχεία στο τέλος του πίνακα και επιστρέφει το νέο του μήκος. Η μέθοδος pop() εκτελεί την αντίστροφη λειτουργία - αφαιρεί το τελευταίο στοιχείο του πίνακα, μειώνει το μήκος του πίνακα και επιστρέφει την τιμή που αφαίρεσε. Σημειώστε ότι και οι δύο αυτές μέθοδοι τροποποιούν τον αρχικό πίνακα αντί να δημιουργούν ένα τροποποιημένο αντίγραφό του.

μεθόδους unshift() και shift().

Οι μέθοδοι unshift() και shift() συμπεριφέρονται σχεδόν το ίδιο με τις push() και pop(), με τη διαφορά ότι εισάγουν και αφαιρούν στοιχεία στην αρχή του πίνακα και όχι στο τέλος. Η μέθοδος unshift() μετατοπίζει υπάρχοντα στοιχεία σε μεγαλύτερους δείκτες για να ελευθερώσει χώρο, προσθέτει το στοιχείο ή τα στοιχεία στην αρχή του πίνακα και επιστρέφει το νέο μήκος του πίνακα. Η μέθοδος shift() αφαιρεί και επιστρέφει το πρώτο στοιχείο του πίνακα, μετατοπίζοντας όλα τα επόμενα στοιχεία προς τα κάτω κατά μία θέση για να καταλάβουν τον κενό χώρο στην αρχή του πίνακα.

  • Μετάφραση
  • I. Επανάληψη σε πραγματικούς πίνακες
    1. για κάθε μέθοδο και σχετικές μεθόδους
    2. για βρόχο
    3. Σωστή χρήση του βρόχου for...in
    4. for...of loop (σιωπηρή χρήση επαναλήπτη)
    5. Ρητή χρήση επαναληπτικού
    1. Χρήση μεθόδων επανάληψης σε πραγματικούς πίνακες
    2. Μετατροπή σε πραγματικό πίνακα
    3. Σημείωση για αντικείμενα χρόνου εκτέλεσης

I. Επανάληψη σε πραγματικούς πίνακες

Προς το παρόν, υπάρχουν τρεις τρόποι για να επαναλάβετε τα στοιχεία ενός πραγματικού πίνακα:
  1. μέθοδος Array.prototype.forEach ;
  2. κλασικό για βρόχο
  3. ένα "σωστά" κατασκευασμένο για...in loop.
Επιπλέον, σύντομα, με την έλευση του νέου προτύπου ECMAScript 6 (ES 6), αναμένονται δύο ακόμη μέθοδοι:
  1. for...of loop (σιωπηρή χρήση του επαναλήπτη);
  2. ρητή χρήση επαναληπτικού.

1. Η μέθοδος forEach και οι σχετικές μέθοδοι

Εάν το έργο σας έχει σχεδιαστεί για να υποστηρίζει τις δυνατότητες του προτύπου ECMAScript 5 (ES5), μπορείτε να χρησιμοποιήσετε μία από τις καινοτομίες του - τη μέθοδο forEach.

Παράδειγμα χρήσης:
var a = ["a", "b", "c"]; a.forEach(function(entry) ( console.log(entry); ));
Γενικά, η χρήση του forEach απαιτεί τη σύνδεση της βιβλιοθήκης εξομοίωσης es5-shim για προγράμματα περιήγησης που δεν υποστηρίζουν εγγενώς αυτήν τη μέθοδο. Αυτά περιλαμβάνουν το IE 8 και προγενέστερα, τα οποία εξακολουθούν να χρησιμοποιούνται σε ορισμένα μέρη.

Το πλεονέκτημα του forEach είναι ότι δεν υπάρχει ανάγκη να δηλωθούν τοπικές μεταβλητές για την αποθήκευση του ευρετηρίου και της τιμής του τρέχοντος στοιχείου πίνακα, αφού μεταβιβάζονται αυτόματα στη συνάρτηση επανάκλησης ως ορίσματα.

Εάν ανησυχείτε για το πιθανό κόστος της επανάκλησης σε κάθε στοιχείο, μην ανησυχείτε και διαβάστε αυτό.

Το ForEach έχει σχεδιαστεί για επανάληψη σε όλα τα στοιχεία ενός πίνακα, αλλά εκτός από αυτό, το ES5 προσφέρει πολλές πιο χρήσιμες μεθόδους για επανάληψη μέσω όλων ή ορισμένων στοιχείων και την εκτέλεση ορισμένων ενεργειών σε αυτά:

  • Κάθε - επιστρέφει true εάν για κάθε στοιχείο του πίνακα η επανάκληση επιστρέφει μια τιμή που μπορεί να μετατραπεί σε true.
  • some - επιστρέφει true εάν για τουλάχιστον ένα στοιχείο του πίνακα η επανάκληση επιστρέφει μια τιμή που μπορεί να μετατραπεί σε true.
  • φίλτρο - δημιουργεί έναν νέο πίνακα που περιλαμβάνει εκείνα τα στοιχεία του αρχικού πίνακα για τα οποία η επανάκληση επιστρέφει true.
  • χάρτης - δημιουργεί έναν νέο πίνακα που αποτελείται από τις τιμές που επιστρέφονται από την επιστροφή κλήσης.
  • μείωση - μειώνει έναν πίνακα σε μία μόνο τιμή, εφαρμόζοντας μια επιστροφή κλήσης σε κάθε στοιχείο πίνακα με τη σειρά του, ξεκινώντας από το πρώτο (μπορεί να είναι χρήσιμο για τον υπολογισμό του αθροίσματος των στοιχείων του πίνακα και άλλων συναρτήσεων σύνοψης).
  • reduceRight - λειτουργεί παρόμοια με τη μείωση, αλλά επαναλαμβάνεται μέσω των στοιχείων με αντίστροφη σειρά.

2. Για βρόχο

Παλιά καλή για κανόνες:

Var a = ["a", "b", "c"]; δείκτης var; για (δείκτης = 0, ευρετήριο< a.length; ++index) { console.log(a); }
Εάν το μήκος του πίνακα είναι σταθερό σε όλο τον βρόχο και ο ίδιος ο βρόχος ανήκει σε ένα κρίσιμο για την απόδοση τμήμα του κώδικα (κάτι που είναι απίθανο), τότε μπορείτε να χρησιμοποιήσετε μια "πιο βέλτιστη" έκδοση του για να αποθηκεύει το μήκος του παράταξη:

Var a = ["a", "b", "c"]; δείκτης var, len; για (δείκτης = 0, len = α.μήκος, δείκτης< len; ++index) { console.log(a); }
Θεωρητικά, αυτός ο κώδικας θα πρέπει να τρέχει λίγο πιο γρήγορα από τον προηγούμενο.

Εάν η σειρά των στοιχείων δεν είναι σημαντική, τότε μπορείτε να προχωρήσετε ακόμη περισσότερο όσον αφορά τη βελτιστοποίηση και να απαλλαγείτε από τη μεταβλητή για την αποθήκευση του μήκους του πίνακα, αλλάζοντας τη σειρά αναζήτησης προς τα πίσω:

Var a = ["a", "b", "c"]; δείκτης var; για (index = a.length - 1; index >= 0; --index) ( console.log(a); )
Ωστόσο, στις σύγχρονες μηχανές JavaScript τέτοια παιχνίδια βελτιστοποίησης συνήθως δεν σημαίνουν τίποτα.

3. Σωστή χρήση του βρόχου for...in

Εάν σας συμβουλεύουμε να χρησιμοποιήσετε έναν βρόχο for...in, να θυμάστε ότι η επανάληψη σε πίνακες δεν είναι αυτό για το οποίο προορίζεται. Σε αντίθεση με μια κοινή παρανόηση, ο βρόχος for...in δεν επαναλαμβάνεται πάνω από δείκτες πίνακα, αλλά μέσω αναρίθμητων ιδιοτήτων ενός αντικειμένου.

Ωστόσο, σε ορισμένες περιπτώσεις, όπως η επανάληψη σε αραιούς πίνακες, το for...in μπορεί να είναι χρήσιμο, αρκεί να λάβετε προφυλάξεις, όπως φαίνεται στο παρακάτω παράδειγμα:

// a - αραιός πίνακας var a = ; a = "a"; a = "b"; a = "c"; for (κλειδί var στο a) ( if (a.hasOwnProperty(key) && /^0$|^\d*$/.test(key) && key<= 4294967294) { console.log(a); } }
Σε αυτό το παράδειγμα, εκτελούνται δύο έλεγχοι σε κάθε επανάληψη του βρόχου:

  1. ότι ο πίνακας έχει τη δική του ιδιότητα που ονομάζεται κλειδί (δεν έχει κληρονομηθεί από το πρωτότυπό του).
  2. αυτό το κλειδί είναι μια συμβολοσειρά που περιέχει τη δεκαδική αναπαράσταση ενός ακέραιου του οποίου η τιμή είναι μικρότερη από 4294967294. Από πού προέρχεται ο τελευταίος αριθμός; Από τον ορισμό ενός ευρετηρίου πίνακα στο ES5, που δείχνει ότι ο υψηλότερος δείκτης που μπορεί να έχει ένα στοιχείο σε έναν πίνακα είναι: (2^32 - 2) = 4294967294 .
Φυσικά, τέτοιοι έλεγχοι θα χρειαστούν περιττό χρόνο κατά την εκτέλεση του βρόχου. Αλλά στην περίπτωση ενός αραιού πίνακα, αυτή η μέθοδος είναι πιο αποτελεσματική από έναν βρόχο for, καθώς σε αυτήν την περίπτωση επαναλαμβάνονται μόνο εκείνα τα στοιχεία που ορίζονται ρητά στον πίνακα. Έτσι, στο παραπάνω παράδειγμα, θα εκτελεστούν μόνο 3 επαναλήψεις (για τους δείκτες 0, 10 και 10000) - έναντι 10001 στον βρόχο for.

Για να μην γράφετε έναν τόσο δυσκίνητο κώδικα ελέγχου κάθε φορά που χρειάζεται να κάνετε επανάληψη μέσω ενός πίνακα, μπορείτε να τον γράψετε ως ξεχωριστή συνάρτηση:

Συνάρτηση arrayHasOwnIndex(πίνακας, κλειδί) (επιστροφή array.hasOwnProperty(κλειδί) && /^0$|^\d*$/.test(κλειδί) && κλειδί<= 4294967294; }
Στη συνέχεια, το σώμα του βρόχου από το παράδειγμα θα μειωθεί σημαντικά:

Για (κλειδί σε α) ( if (arrayHasOwnIndex(a, κλειδί)) ( console.log(a); ) )
Ο κωδικός ελέγχου που συζητήθηκε παραπάνω είναι καθολικός, κατάλληλος για όλες τις περιπτώσεις. Αντίθετα, μπορείτε να χρησιμοποιήσετε μια πιο σύντομη έκδοση, αν και τυπικά δεν είναι εντελώς σωστή, αλλά εντούτοις κατάλληλη για τις περισσότερες περιπτώσεις:

Για (κλειδί σε α) ( if (a.hasOwnProperty(κλειδί) && String(parseInt(key, 10)) === κλειδί) ( console.log(a); ) )

4. For...of loop (σιωπηρή χρήση επαναλήπτη)

Το ES6, που εξακολουθεί να βρίσκεται σε κατάσταση πρόχειρου, θα πρέπει να εισάγει επαναληπτικούς παράγοντες στο JavaScript.

Iterator είναι ένα πρωτόκολλο που υλοποιείται από ένα αντικείμενο που ορίζει έναν τυπικό τρόπο λήψης μιας ακολουθίας τιμών (πεπερασμένες ή άπειρες).
Ένας επαναλήπτης είναι ένα αντικείμενο που ορίζει μια μέθοδο next() - μια συνάρτηση χωρίς όρισμα που επιστρέφει ένα αντικείμενο με δύο ιδιότητες:

  1. έγινε (boolean) - true αν ο επαναλήπτης έχει φτάσει στο τέλος της επαναλαμβανόμενης ακολουθίας. Διαφορετικά η τιμή είναι ψευδής.
  2. τιμή - ορίζει την τιμή που επιστρέφεται από τον επαναλήπτη. Μπορεί να είναι απροσδιόριστο (λείπει) εάν η ιδιότητα που έγινε είναι αληθής .
Πολλά ενσωματωμένα αντικείμενα, συμ. Οι πραγματικοί πίνακες έχουν επαναλήπτες από προεπιλογή. Ο απλούστερος τρόπος για να χρησιμοποιήσετε έναν επαναλήπτη σε πραγματικούς πίνακες είναι να χρησιμοποιήσετε το νέο για...της κατασκευής.

Παράδειγμα χρήσης για...από:

Varval; var a = ["a", "b", "c"]; για (val of a) ( console.log(val); )
Στο παραπάνω παράδειγμα, ο βρόχος for...of καλεί έμμεσα τον επαναλήπτη του αντικειμένου Array για να λάβει κάθε τιμή του πίνακα.

5. Ρητή χρήση επαναληπτικού

Οι επαναλήπτες μπορούν επίσης να χρησιμοποιηθούν ρητά, ωστόσο, σε αυτήν την περίπτωση ο κώδικας γίνεται πολύ πιο περίπλοκος σε σύγκριση με τον βρόχο for...of. Μοιάζει κάπως έτσι:

Var a = ["a", "b", "c"]; var it = a.entries(); var καταχώρηση? ενώ (!(entry = it.next()).done) ( console.log(entry.value); )
Σε αυτό το παράδειγμα, η μέθοδος Array.prototype.entries επιστρέφει έναν επαναλήπτη που χρησιμοποιείται για την εμφάνιση των τιμών του πίνακα. Σε κάθε επανάληψη, το entry.value περιέχει έναν πίνακα της μορφής [key, value] .

II. Επανάληψη σε αντικείμενα που μοιάζουν με πίνακα

Εκτός από πραγματικούς πίνακες, υπάρχουν και στο JavaScript αντικείμενα που μοιάζουν με πίνακα . Αυτό που έχουν κοινό με τους πραγματικούς πίνακες είναι ότι έχουν μια ιδιότητα μήκους και ιδιότητες που ονομάζονται αριθμοί που αντιστοιχούν στα στοιχεία του πίνακα. Τα παραδείγματα περιλαμβάνουν το DOM της συλλογής NodeList και τα ορίσματα ψευδοσυστοιχίας, διαθέσιμα σε οποιαδήποτε συνάρτηση/μέθοδο.

1. Χρήση μεθόδων επανάληψης σε πραγματικούς πίνακες

Τουλάχιστον, οι περισσότερες, αν όχι όλες, μέθοδοι επανάληψης σε πραγματικούς πίνακες μπορούν να χρησιμοποιηθούν για επανάληψη σε αντικείμενα που μοιάζουν με πίνακα.

Οι κατασκευές for και for...in μπορούν να εφαρμοστούν σε αντικείμενα που μοιάζουν με πίνακα με τον ίδιο ακριβώς τρόπο που εφαρμόζονται σε πραγματικούς πίνακες.

ForEach και άλλες μέθοδοι Array.prototype ισχύουν επίσης για αντικείμενα που μοιάζουν με πίνακα. Για να το κάνετε αυτό, πρέπει να χρησιμοποιήσετε το Function.call ή το Function.apply.

Για παράδειγμα, εάν θέλετε να εφαρμόσετε το forEach στην ιδιότητα childNodes ενός αντικειμένου Node, θα το κάνετε ως εξής:

Array.prototype.forEach.call(node.childNodes, function(child) ( // κάντε κάτι με το θυγατρικό αντικείμενο));
Για να κάνετε αυτό το τέχνασμα πιο εύκολο στην επαναχρησιμοποίηση, μπορείτε να δηλώσετε μια αναφορά στη μέθοδο Array.prototype.forEach σε μια ξεχωριστή μεταβλητή και να τη χρησιμοποιήσετε ως συντόμευση:

// (Υποθέτοντας ότι όλος ο παρακάτω κώδικας βρίσκεται στο ίδιο πεδίο εφαρμογής) var forEach = Array.prototype.forEach; // ... forEach.call(node.childNodes, function(child) ( // κάντε κάτι με το θυγατρικό αντικείμενο));
Εάν ένα αντικείμενο που μοιάζει με πίνακα έχει έναν επαναλήπτη, μπορεί να χρησιμοποιηθεί ρητά ή σιωπηρά για επανάληψη πάνω από το αντικείμενο με τον ίδιο τρόπο όπως για πραγματικούς πίνακες.

2. Μετατροπή σε πραγματικό πίνακα

Υπάρχει επίσης ένας άλλος, πολύ απλός τρόπος επανάληψης σε ένα αντικείμενο που μοιάζει με πίνακα: μετατρέψτε τον σε πραγματικό πίνακα και χρησιμοποιήστε οποιαδήποτε από τις μεθόδους που συζητήθηκαν παραπάνω για επανάληψη σε πραγματικούς πίνακες. Για τη μετατροπή, μπορείτε να χρησιμοποιήσετε τη γενική μέθοδο Array.prototype.slice, η οποία μπορεί να εφαρμοστεί σε οποιοδήποτε αντικείμενο που μοιάζει με πίνακα. Αυτό γίνεται πολύ απλά, όπως φαίνεται στο παρακάτω παράδειγμα:

Var trueArray = Array.prototype.slice.call(arrayLikeObject, 0);
Για παράδειγμα, εάν θέλετε να μετατρέψετε μια συλλογή NodeList σε έναν πραγματικό πίνακα, θα χρειαστείτε κώδικα κάπως έτσι:

Var divs = Array.prototype.slice.call(document.querySelectorAll("div"), 0);
Εκσυγχρονίζω: Όπως σημειώνεται στα σχόλια

Οι πίνακες είναι ένας από τους πιο συχνά χρησιμοποιούμενους τύπους μεταβλητών που σας επιτρέπουν να αποθηκεύετε πολλές διαδοχικές τιμές σε "ένα μέρος". Ωστόσο, όταν πρόκειται για JavaScript, υπάρχει περιθώριο βελτίωσης.

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

1. Προσθήκη προσαρμοσμένων ιδιοτήτων σε πίνακες

Εάν χρησιμοποιείτε μια αναζήτηση για να βρείτε τον ορισμό ενός πίνακα στη γλώσσα JavaScript, οι περισσότερες πηγές θα αναφέρουν ότι αυτός ο τύπος τιμής μεταβλητής αναπαρίσταται ως αντικείμενο.

Σε γενικές γραμμές, πολλά από τα πράγματα που συναντάμε στο JavaScript είναι αντικείμενα. Θα ήταν δίκαιο να σημειωθεί ότι η γλώσσα περιέχει επίσης «πρωτόγονους» τύπους δεδομένων, αλλά οι τιμές τους χρησιμοποιούνται κατά κάποιο τρόπο σε ιδιότητες μέσα σε αντικείμενα.

2. Πρόσβαση σε στοιχεία πίνακα εντός βρόχου

Δεδομένου ότι οι δείκτες πίνακα μπορούν να λάβουν μόνο θετικές τιμές, η μέτρηση ξεκινά από το μηδέν. Μπορούμε αργότερα να χρησιμοποιήσουμε αυτό το ευρετήριο για πρόσβαση στο στοιχείο του πίνακα σε μια δεδομένη επανάληψη βρόχου.

Το ECMAScript6 εισήγαγε έναν τρόπο κύλισης σε έναν πίνακα χωρίς τη χρήση ευρετηρίων, αλλά μέσω ενός νέου βρόχου for…of.

Ο βρόχος for...of έχει σχεδιαστεί για να επαναλαμβάνεται μέσω των στοιχείων ενός πίνακα χωρίς να επηρεάζει το δείκτη του στοιχείου.

Var ary = ["πορτοκάλι", "μήλο", "λίτσι"]; for (έστω στοιχείο του ary)( console.log(item); ) // "πορτοκαλί", "μήλο", "λίτσι" Για σύγκριση: έξοδος δεικτών στοιχείων σε έναν βρόχο for. var ary = ["πορτοκαλί", "μήλο", "λίτσι"]; για (var item = 0; item< ary.length; item++){ console.log(item); } // 0, 1, 2

3. Ο αριθμός των στοιχείων δεν είναι η διάσταση του πίνακα

Όταν μιλάμε για το μέγεθος ενός πίνακα, συνήθως τον θεωρούμε ως τον αριθμό των στοιχείων που είναι αποθηκευμένα σε αυτόν. Στην πραγματικότητα, αυτό δεν είναι απολύτως αληθές - η ιδιότητα μήκους υπολογίζεται ανάλογα με τον μέγιστο δείκτη του στοιχείου.

Η ιδιότητα μήκους είναι πολύ διφορούμενη. Για να το επαληθεύσετε, απλώς δείτε τους παρακάτω χειρισμούς:

Var ary = ; αρ.μήκος = 3; console.log(ary.length); // 3 ary = "abcd"; console.log(ary.length); // 6

Στο τελευταίο παράδειγμα, αρκούσε να βάλουμε το στοιχείο στην πέμπτη θέση, με αποτέλεσμα το μήκος του πίνακα να γίνει 6. Αν πιστεύετε ότι οι δείκτες από το 0 έως το 4 θα δημιουργηθούν αυτόματα, θα κάνετε λάθος. Αυτό μπορεί να ελεγχθεί χρησιμοποιώντας τον τελεστή in.

Var ary = ; αρ.μήκος = 3; console.log(ary.length); // 3 ary = "abcd"; console.log(ary.length); // 6 console.log(0 σε ary); // ψευδής

Σε αυτή την περίπτωση, θα ήταν δίκαιο να ονομαστεί ο πίνακας ary "αραιός".

Μπορούμε επίσης να χειριστούμε την ιδιότητα length για να περικόψουμε πίνακες. Το παρακάτω παράδειγμα δείχνει την «χάση» του στοιχείου στον δείκτη 5 μειώνοντας την ιδιότητα μήκους του πίνακα ary.

Var ary = ; αρ.μήκος = 3; console.log(ary.length); // 3 ary = "abcd"; console.log(ary.length); // 6 ary.length = 2; console.log(ary.length); // 2 console.log(ary); // απροσδιόριστο

Περιέγραψα μόνο μερικές από τις μεθόδους εργασίας με πίνακες.

Εδώ θα μιλήσουμε για την προσθήκη και αφαίρεση στοιχείων πίνακα. Σχετικά με την αναστροφή και την ταξινόμηση ενός πίνακα, καθώς και σχετικά με τον τεμαχισμό, την αντικατάσταση και το συνδυασμό πινάκων.

Προσθήκη στοιχείων σε έναν πίνακα.

Μπορείτε να χρησιμοποιήσετε την ιδιότητα length για να προσθέσετε νέα στοιχεία στον πίνακα:

Var myArray = ["Apple", "Microsoft", "Google", "Facebook"]; myArray = "Yahoo!"; console.log(myArray); // ["Apple", "Microsoft", "Google", "Facebook", "Yahoo!"]

Αυτό θα λειτουργήσει γιατί... Τα στοιχεία του πίνακα αριθμούνται ξεκινώντας από το μηδέν και μήκοςένα ακόμα. Μήκοςπάντα ισοδύναμο ευρετήριο + 1, επομένως είναι πολύ εύκολο να προσθέσετε ένα νέο στοιχείο στο τέλος του πίνακα. Παραδόξως, μπορείτε να προσθέσετε ένα στοιχείο σε μια θέση που είναι πολύ μεγαλύτερη από το μήκος του ίδιου του πίνακα:

Var myArray = ["Jimi Hendrix", "Eric Clapton", "Jimmy Page", "Keith Richards"]; myArray = "Lindsey Buckingham"; console.log(myArray); // ["Jimi Hendrix", "Eric Clapton", "Jimmy Page", "Keith Richards", undefined × 95, "Lindsey Buckingham"] console.log(myArray.length); // 100

Όπως φαίνεται στα σχόλια, αυτό θα προσθέσει 95 κενές θέσεις και το στοιχείο "Lindsey Buckingham" στο τέλος της συστοιχίας. Μετά από αυτό θα έχουμε μήκος 100. Ένας άλλος τρόπος για να προσθέσετε ένα νέο στοιχείο στον πίνακα είναι να χρησιμοποιήσετε τη μέθοδο Σπρώξτε():

Var myArray = ["Paul McCartney", "John Lennon", "George Harrison"]; myArray.push("Ringo Starr", "George Martin"); console.log(myArray); // ["Paul McCartney", "John Lennon", "George Harrison", "Ringo Starr", "George Martin"]

Μέθοδος Σπρώξτε()επιστρέφει πάντα το νέο μήκος του πίνακα (στην περίπτωσή μας 5). Μπορείτε να προσθέσετε ένα στοιχείο χρησιμοποιώντας συνδέω():

Var myArray = ["βελανίδι", "οξιά", "μονγκόνγκο", "μακαντάμια"]; myArray.splice(2, 0, "κάσιους"); // προσθέτει το "cashew" στο index 2 console.log(myArray); // ["βελανίδι", "οξιά", "κάσιους", "μονγκόνγκο", "μακαντάμια"]

Όταν το δεύτερο όρισμα είναι 0, σημαίνει ότι κανένα στοιχείο δεν θα αφαιρεθεί και επομένως τυχόν μεταγενέστερα ορίσματα θα προστεθούν στον πίνακα στη θέση που καθορίζεται στο πρώτο όρισμα.

Αφαίρεση στοιχείων από έναν πίνακα

Η αφαίρεση ενός στοιχείου είναι λίγο πιο δύσκολη από την προσθήκη του. Για να αφαιρέσετε ένα στοιχείο από το τέλος ενός πίνακα, μπορείτε να χρησιμοποιήσετε κρότος():

Var myArray = ["7-up", "Sprite", "Ginger Ale", "Lemonade"]; myArray.pop(); console.log(myArray); // ["7-up", "Sprite", "Ginger Ale"]

Μέθοδος κρότος()αφαιρεί πάντα το τελευταίο στοιχείο του πίνακα και το επιστρέφει.

Μπορείτε επίσης να χρησιμοποιήσετε συνδέω()μέθοδος:

Var myArray = ["μανιόκα", "μοσχοκάρυδο", "λούπινο", "ραβέντι"]; myArray.splice(2, 1); // αφαίρεση στοιχείου με δείκτη 2 console.log(myArray); // ["μανιόκα", "μοσχοκάρυδο", "ραβέντι"]

Σε αντίθεση με τη μέθοδο συνδέω(),που χρησιμοποιείται για την προσθήκη στοιχείων, εδώ το δεύτερο όρισμα είναι 1, που λέει ότι θέλουμε να αφαιρέσουμε το στοιχείο με δείκτη 2 (ή 3ο στη σειρά). Σε αυτήν την περίπτωση, το στοιχείο "λούπιν" αφαιρέθηκε.

Μπορείτε να αφαιρέσετε ένα στοιχείο από έναν πίνακα χρησιμοποιώντας τον τελεστή διαγράφω:

Var myArray = ["Byte Bandit", "Eliza", "Jeefo", "Michelangelo"]; console.log(myArray.length); // 4 διαγραφή myArray; // διαγραφή Eliza console.log(myArray.length); // 4 console.log(myArray); // ["Byte Bandit", απροσδιόριστο × 1, "Jeefo", "Michelangelo"]

Πρώτη σημαντική σημείωση: διαγράφω()δεν αλλάζει το μήκος του πίνακα μετά την αφαίρεση ενός στοιχείου (ακόμα και αν ήταν το τελευταίο στοιχείο του πίνακα). Δεύτερος: διαγράφω()αλλάζει την τιμή του στοιχείου που θα αφαιρεθεί σε απροσδιόριστο, οπότε κατά την πρόσβαση myArray = απροσδιόριστο.

Ένας καλός τρόπος για να αφαιρέσετε ένα στοιχείο από έναν πίνακα είναι να χρησιμοποιήσετε το Array.remove του John Resig. Παρακάτω είναι ένα παράδειγμα χρήσης από τη σελίδα του:

// Array Remove - By John Resig (Mit Licensed) Array.prototype.remove = function(from, to) ( var rest = this.slice((to || from) + 1 || this.length); this.length = από< 0 ? this.length + from: from; return this.push.apply(this, rest); }; // Удаление 2 элемента из массива array.remove(1); // Удаление 2-ого элемента с конца массива array.remove(-2); // Удаление второго и третьего элемента array.remove(1,2); // Удаление последнего и предпоследнего элемента array.remove(-2,-1);

Ίσως θέλετε να δείτε τη λύση του Viral Patel, μια από τις συναρτήσεις στο Underscore.js ή τη grep() του jQuery.

Επιπλέον, σε JavaScriptυπάρχει μέθοδος αλλαγή(),που αφαιρεί το πρώτο στοιχείο του πίνακα και επιστρέφει την τιμή του. Ας δούμε τον κώδικα:

Var myArray = ["Matt Kramer", "Jason Bieler", "Tom Defile", "Phil Varone"]; console.log(myArray.length); // 4 var firstItem = myArray.shift(); console.log(firstItem); // Matt Kramer console.log(myArray.length); // 3 console.log(myArray); // ["Jason Bieler", "Tom Defile", "Phil Varone"]

Χρησιμοποιώντας τη μέθοδο αλλαγή()αφαιρέσαμε το στοιχείο αλλά αποθηκεύσαμε την τιμή του στη μεταβλητή firstItem. Το μήκος του πίνακα άλλαξε από 4 σε 3.

Αυτή η μέθοδος μπορεί να είναι χρήσιμη μαζί με τη μέθοδο Σπρώξτε().Χρησιμοποιώντας τα μαζί, μπορούμε να βάλουμε αποτελεσματικά στοιχεία σε ουρά σε έναν πίνακα. Διατηρούμε το μήκος του πίνακα αφαιρώντας ένα στοιχείο από την αρχή και προσθέτοντας ένα νέο στο τέλος.

Αντίθετα, μπορούμε να χρησιμοποιήσουμε τη μέθοδο unshift()για να προσθέσετε ένα στοιχείο στην αρχή του πίνακα:

Var myArray = ["apito", "castanets", "maraca"]; console.log(myArray.length); // 3 myArray.unshift("bar chime", "tan-tan"); console.log(myArray.length); // 5 console.log(myArray); // ["chime bar", "tan-tan", "apito", "castanets", "maraca"]

Χρήση της μεθόδου unshift()με μέθοδο κρότος(),μπορείτε να δημιουργήσετε ουρές αντίστροφα προσθέτοντας στοιχεία στην αρχή και αφαιρώντας από το τέλος του πίνακα.

Αντιστροφή και ταξινόμηση στοιχείων πίνακα.

Για να αντιστρέψουμε τα στοιχεία σε έναν πίνακα μπορούμε να χρησιμοποιήσουμε αντίστροφο():

Var myArray = ["countdown", "final", "the"]; console.log(myArray); // ["countdown", "final", "the"] myArray = myArray.reverse(); console.log(myArray); // ["το", "τελικό", "αντίστροφη μέτρηση"]

Είναι δυνατή η ταξινόμηση στοιχείων πίνακα με αλφαβητική σειρά χρησιμοποιώντας τη μέθοδο είδος():

Var myArray = ["ξυλόφωνα", "ζέβρες", "τζογκερναύτες", "αβοκάντο"]; console.log(myArray); // ["ξυλόφωνα", "ζέβρες", "τζογκερναύτες", "αβοκάντο"] myArray = myArray.sort(); console.log(myArray); // ["αβοκάντο", "τζογκερναύτες", "ξυλόφωνα", "ζέβρες"]

Αλλά αυτό δεν θα λειτουργήσει με αριθμούς.

Var myArray = ; console.log(myArray); // myArray = myArray.sort(); console.log(myArray); //

Εάν χρειάζεται να ταξινομήσετε αριθμούς, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα:

Συνάρτηση compareNumbers(a, b) ( return a - b; ) var myArray = ; console.log(myArray); // myArray = myArray.sort(compareNumbers); console.log(myArray); //

Όπως φαίνεται παραπάνω, με μια απλή συνάρτηση που έχει εισαχθεί είδος(),ένας πίνακας που περιέχει αριθμούς θα ταξινομηθεί σωστά.

Συνδυασμός πινάκων.

Μπορούμε να συνδυάσουμε 2 ή περισσότερους πίνακες και να πάρουμε 1 πίνακα που περιέχει τα στοιχεία των ενωμένων πινάκων. Για αυτό χρησιμοποιούμε τη μέθοδο concat():

Var myArray = ["Jay Ferguson", "Andrew Scott"]; var myArray2 = ["Chris Murphy", "Patrick Pentland"]; var myNewArray = myArray.concat(myArray2); console.log(myNewArray); // ["Jay Ferguson", "Andrew Scott", "Chris Murphy", "Patrick Pentland"]

Var myArray = ["Jay Ferguson", "Andrew Scott"]; var myNewArray = myArray.concat("Chris Murphy", "Patrick Pentland"); console.log(myNewArray); // ["Jay Ferguson", "Andrew Scott", "Chris Murphy", "Patrick Pentland"]

Διαίρεση πίνακα.

Μπορούμε να δημιουργήσουμε έναν νέο πίνακα που περιέχει 1 ή περισσότερα στοιχεία από έναν υπάρχοντα πίνακα χρησιμοποιώντας τη συνάρτηση φέτα():

Var myArray = ["Φωνητικά", "Μπάσο", "Κιθάρα", "Τύμπανα", "Μήλα", "Πορτοκάλια"]; var myNewArray = myArray.slice(4); console.log(myNewArray); // ["Μήλα", "Πορτοκάλια"]

Μέθοδος φέτα()παίρνει 1 ή 2 ορίσματα. Αν περάσει 1 όρισμα (ευρετήριο), τότε δημιουργείται ένας νέος πίνακας από όλα τα στοιχεία του παλιού, ξεκινώντας από αυτό το ευρετήριο. Αν περάσουν 2 ορίσματα, τότε δημιουργείται ένας νέος πίνακας από τα στοιχεία που ξεκινούν από το πρώτο όρισμα και μέχρι το στοιχείο με το δείκτη που έχει περάσει στη δεύτερη παράμετρο, χωρίς να περιλαμβάνεται η τελευταία. Για να γίνει πιο σαφές, ας δούμε τον παρακάτω κώδικα:

Var myArray = ["Φωνητικά", "Μπάσο", "Κιθάρα", "Τύμπανα", "Μήλα", "Πορτοκάλια"]; var myNewArray = myArray.slice(0, 4); console.log(myNewArray); // ["Φωνητικά", "Μπάσο", "Κιθάρα", "Τύμπανα"]

Αντικατάσταση στοιχείων σε πίνακα.

χρησιμοποιούμε συνδέω()για να αφαιρέσουμε στοιχεία από έναν πίνακα, αλλά μπορούμε επίσης να αντικαταστήσουμε ένα στοιχείο του πίνακα με νέα στοιχεία:

Var myArray = ["Rivers Cuomo", "Patrick Wilson", "Brian Bell", "Matt Sharp"]; myArray.splice(3, 1, "Scott Shriner"); // αντικατάσταση 1 στοιχείου με δείκτη 3 console.log(myArray); // ["Rivers Cuomo", "Patrick Wilson", "Brian Bell", "Scott Shriner"]

Μέθοδος συνδέω()επιστρέφει πάντα έναν πίνακα που περιέχει τα στοιχεία που αφαιρέθηκαν. Η γραμμή 2 θα επιστρέψει 1 στοιχείο "Brian Bell".

Σύναψη

Αυτά τα άρθρα περιγράφουν μεθόδους εργασίας με πίνακες σε JavaScript. Υπάρχουν μερικά επιπλέον στοιχεία που μπορείτε να δείτε στο MDN που δεν συμπεριέλαβα σε αυτήν την ανάρτηση. Λειτουργούν μόνο σε IE9+, επομένως μπορεί να μην είναι χρήσιμα.

Τίποτα να προσθέσετε; Ή γνωρίζετε κάποια ενδιαφέρουσα βιβλιοθήκη που θα βοηθήσει στη διαχείριση πινάκων; Παρακαλώ σχολιάστε!

Σε αυτό το άρθρο θα εξετάσουμε έναν πίνακα JavaScript και τα στοιχεία του. Η JavaScript είναι ιδανικά σχεδιασμένη για προγραμματισμό. Στην πραγματικότητα, υλοποιεί τη γλώσσα ECMAScript (πρότυπο ECMA-262).

Πού χρησιμοποιείται η JavaScript; Χρησιμοποιείται ως ενσωματωμένη γλώσσα για τον καθορισμό μιας διαδρομής προγράμματος προς ένα θέμα εφαρμογής. Μπορεί να βρεθεί σε προγράμματα περιήγησης όπου χρησιμοποιείται ως γλώσσα σεναρίου που κάνει τις ιστοσελίδες διαδραστικές.

Τα πιο σημαντικά αρχιτεκτονικά χαρακτηριστικά αυτού του προϊόντος είναι η δυναμική και αδύναμη πληκτρολόγηση, η αυτόματη διαχείριση μνήμης, ο τέλειος προγραμματισμός και οι λειτουργίες αντικειμένων πρώτης κατηγορίας.

Γενικά, η JavaScript επηρεάστηκε από διάφορους λόγους, γιατί κατά την ανάπτυξη ήθελαν να δημιουργήσουν μια γλώσσα παρόμοια με την Java, αλλά εύκολη στη χρήση από τους προγραμματιστές. Παρεμπιπτόντως, η γλώσσα JavaScript δεν ανήκει σε καμία εταιρεία ή οργανισμό, γεγονός που την κάνει να διαφέρει από πολλά στυλ προγραμματισμού που χρησιμοποιούνται από προγραμματιστές ιστού.

Θα πρέπει να σημειωθεί ότι το JavaScript είναι σήμα κατατεθέν της Oracle Corporation.

Τι είναι ένας πίνακας;

Ένας πίνακας είναι αυτός που αποθηκεύει αριθμημένες τιμές. Κάθε τέτοια τιμή ονομάζεται συστατικό πίνακα και το ψηφίο στο οποίο συσχετίζεται το στοιχείο ονομάζεται ευρετήριο. Ο πίνακας JavaScript δεν είναι πληκτρολογημένος. Αυτό σημαίνει ότι τα μέρη ενός πίνακα μπορεί να είναι οποιουδήποτε τύπου και διαφορετικά μέρη που ανήκουν στον ίδιο πίνακα έχουν εντελώς διαφορετικούς τύπους.

Επιπλέον, ο πίνακας JavaScript είναι δυναμικός, πράγμα που σημαίνει ότι δεν χρειάζεται να δηλώσετε ένα σταθερό μέγεθος. Μετά από όλα, μπορείτε να προσθέσετε νέες λεπτομέρειες ανά πάσα στιγμή.

Παραγωγή συστοιχιών

Χρησιμοποιώντας JavaScript, η δημιουργία ενός πίνακα δεν είναι καθόλου δύσκολη. Υπάρχουν δύο μέθοδοι για αυτό. Το πρώτο περιλαμβάνει τη δημιουργία ενός πίνακα χρησιμοποιώντας μια κυριολεκτική - αγκύλες, μέσα στην οποία υπάρχει μια λίστα τμημάτων, που χωρίζονται με κόμματα.

  • var κενό = ; //κενός πίνακας;
  • var αριθμοί = ; //πίνακας με πέντε ψηφιακά στοιχεία.
  • var diff = ; //πίνακας με τρία στοιχεία διαφορετικών τύπων.

Συνήθως, οι τιμές εδώ δεν απαιτείται να είναι απλές (συμβολοσειρές και αριθμοί). Μπορεί επίσης να είναι οποιεσδήποτε άλλες εκφράσεις, για παράδειγμα, κυριολεκτικά θέματος, άλλες συναρτήσεις και πίνακες.

Ο δεύτερος τρόπος για να δημιουργήσετε έναν πίνακα είναι να καλέσετε τον σχεδιαστή Array(). Μπορείτε να τον προσκαλέσετε με τρεις τρόπους:

  • Κλήση του σχεδιαστή χωρίς ορίσματα: var b - new Array(). Αυτό προβλέπει τη δημιουργία ενός κενού πίνακα, που ισοδυναμεί με ένα κενό κυριολεκτικό.
  • Ο κατασκευαστής καθορίζει ρητά την τιμή των n στοιχείων του πίνακα: var b = νέος πίνακας (1, 3, 5, 8, "string", true). Σε αυτήν την περίπτωση, ο σχεδιαστής παρουσιάζεται με μια λίστα ορισμάτων που μετατρέπονται σε στοιχεία ενός νέου πίνακα. Τα ορίσματα γράφονται στον πίνακα στη θέση στην οποία καθορίζονται.
  • Καθορισμός της περιοχής για μετέπειτα εκχώρηση τιμών. Αυτό γίνεται καθορίζοντας, κατά την αναγνώριση ενός πίνακα, έναν μόνο αριθμό που περικλείεται σε παρένθεση: var b = νέος πίνακας (5). Αυτή η μέθοδος αναγνώρισης περιλαμβάνει την κατανομή του απαιτούμενου αριθμού στοιχείων στον πίνακα (καθένα από τα οποία αναφέρεται ως απροσδιόριστο) με τη δυνατότητα εκ των υστέρων εκχώρησης τιμών κατά τη διαδικασία παρουσίασης. Αυτή η φόρμα χρησιμοποιείται συνήθως για την εκ των προτέρων εκχώρηση ενός πίνακα Javascript του οποίου το μήκος είναι γνωστό εκ των προτέρων.

Γράψιμο, ανάγνωση και προσθήκη λεπτομερειών πίνακα

Μπορείτε να αποκτήσετε πρόσβαση στα στοιχεία ενός πίνακα χρησιμοποιώντας τον τελεστή. Παρεμπιπτόντως, όλα τα στοιχεία στο JavaScript, ξεκινώντας από το μηδέν, είναι αριθμημένα. Για να αποκτήσετε το απαιτούμενο στοιχείο, ο αριθμός του υποδεικνύεται στο Κατά κανόνα, τα στοιχεία μπορούν να αλλάξουν. Και για να προσθέσετε JavaScript στον πίνακα, πρέπει απλώς να αντιστοιχίσετε μια νέα τιμή.

Θα πρέπει να σημειωθεί ότι οι πίνακες JavaScript μπορούν να αποθηκεύσουν οποιονδήποτε αριθμό στοιχείων οποιουδήποτε είδους.

Μήκος πίνακα

Έτσι, γνωρίζουμε ότι το μήκος ενός πίνακα είναι γενικά ένα ενδιαφέρον φαινόμενο. Ας το ρίξουμε μια πιο προσεκτική ματιά. Όλοι οι πίνακες, είτε κατασκευάζονται χρησιμοποιώντας τον σχεδιαστή Array() είτε αποκαλύπτονται μέσω ενός πίνακα κυριολεκτικά, έχουν μια ιδιότητα συγκεκριμένου μήκους που υποδεικνύει τον συνολικό αριθμό των στοιχείων που είναι αποθηκευμένα. Δεδομένου ότι ένας πίνακας μπορεί να περιέχει απροσδιόριστα μέρη (που συμβολίζονται με απροσδιόριστα), μια πιο ακριβής έκφραση είναι: η ποιότητα μήκους είναι πάντα ένα μεγαλύτερο από τον μεγαλύτερο αριθμό (δείκτη) του συστατικού πίνακα. Η ποιότητα μήκους προσαρμόζεται αυτόματα, παραμένοντας ακριβής όταν εμφανίζονται νέα εξαρτήματα στη συστοιχία.

Για να εμφανιστεί το τελικό στοιχείο του πίνακα, μπορείτε να χρησιμοποιήσετε την ιδιότητα μήκος.

Το τελευταίο μέρος έχει δείκτη ένα μικρότερο από το μέγεθος του πίνακα. Άλλωστε, η αντίστροφη μέτρηση ξεκινά πάντα από την αρχή. Ω, αυτό το JavaScript! Το μήκος του πίνακα εξαρτάται από τον ακριβή αριθμό των στοιχείων. Επομένως, εάν δεν ξέρετε πόσα πρέπει να υπάρχουν, αλλά πρέπει να αποκτήσετε πρόσβαση στο τελικό στοιχείο του πίνακα, πρέπει να χρησιμοποιήσετε τη σημείωση: v.length - 1.

Επανάληψη σε λεπτομέρειες πίνακα

Πολύ συχνά η ιδιότητα μήκος χρησιμοποιείται για την επανάληψη των λεπτομερειών ενός πίνακα σε έναν βρόχο:

  • var fruits = ["φράουλα", "ροδάκινο", "μήλο", "μπανάνα"];
  • for(var I = 0; i< fruits.lenght; i++);
  • document.write(fruits[i] + "...").

Σε αυτό το παράδειγμα, τα στοιχεία φαίνεται να τοποθετούνται συνεχώς και ξεκινούν με το πρώτο μέρος να έχει μηδενικό δείκτη. Εάν δεν συμβαίνει αυτό, πριν καλέσετε κάθε στοιχείο του πίνακα, πρέπει να ελέγξετε αν έχει οριστεί.

Ένας βρόχος χρησιμοποιείται επίσης μερικές φορές για την προετοιμασία στοιχείων.

Ανάπτυξη και περικοπή ενός πίνακα

Αναρωτιέμαι πώς να προσθέσω μια συμβολοσειρά σε έναν πίνακα χρησιμοποιώντας JavaScript; Καθώς εργαζόμαστε με συστοιχίες, το μήκος ποιότητας βελτιώνεται αυτόματα, γι' αυτό πρέπει να το φροντίζουμε μόνοι μας. Είναι απαραίτητο να θυμάστε μια λεπτομέρεια - η ιδιότητα μήκους δεν είναι μόνο αναγνώσιμη, αλλά και εγγράψιμη. Εάν στην ποιότητα μήκους εκχωρηθεί μια τιμή μικρότερη σε μέγεθος από την τρέχουσα, τότε ο πίνακας μειώνεται στο καθορισμένο μέγεθος. Τυχόν στοιχεία που δεν βρίσκονται στο νέο εύρος ευρετηρίου απορρίπτονται και οι τιμές τους χάνονται, ακόμη και αν το μήκος επιστραφεί αργότερα - οι τιμές δεν αποκαθίστανται.

Είναι πολύ εύκολο να καθαρίσετε τον πίνακα ως εξής: foo.length = 0.

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

Αφαίρεση εξαρτημάτων μοτίβου

Ο τελεστής διαγραφής καθορίζει μια απροσδιόριστη τιμή σε ένα στοιχείο πίνακα, αλλά συνεχίζει να υπάρχει. Εάν πρέπει να αφαιρέσετε ένα στοιχείο ενός πίνακα JavaScript έτσι ώστε τα υπόλοιπα μέρη να μετακινηθούν στον ελεύθερο χώρο, πρέπει να χρησιμοποιήσετε μία από τις παρεχόμενες μεθόδους πίνακα. Η μέθοδος Array.shift() εξαλείφει το πρώτο στοιχείο, η pop() εξαλείφει το τελικό στοιχείο και η μέθοδος splice() εξαλείφει ένα ή ένα εύρος στοιχείων οπουδήποτε στον πίνακα.

Πολυδιάστατοι πίνακες

Φαίνεται ότι το έχουμε καταλάβει λίγο, οι δισδιάστατοι πίνακες είναι αυτό που πρέπει να εξετάσουμε στη συνέχεια. Θυμάστε ότι οι πίνακες JavaScript μπορούν να περιέχουν άλλα στοιχεία ως στοιχεία; Αυτή η δυνατότητα χρησιμοποιείται για την παραγωγή πολυδιάστατων πινάκων. Για να επισκεφθείτε στοιχεία σε μια σειρά πινάκων, απλώς χρησιμοποιήστε αγκύλες δύο φορές.

Συνειρμικοί πίνακες

Τώρα ας εξερευνήσουμε πώς το εμπορικό σήμα JavaScript χρησιμοποιεί συσχετιστικούς πίνακες. Για να γίνει αυτό, πρέπει να εξετάσουμε τη θεωρία: οι συσχετιστικοί πίνακες ονομάζονται μερικές φορές πίνακες κατακερματισμού. Χάρη σε αυτά, χρησιμοποιούνται συμβολοσειρές αντί για ευρετήρια. Η χρήση τέτοιων κατασκευών θυμίζει τη χρήση του ονόματος ιδιοκτησίας ενός απλού αντικειμένου, αλλά σε αυτήν την έκδοση κατά την εκτέλεση εργασιών σε μορφή πίνακα. Δεδομένου ότι η JavaScript δεν διαθέτει τρόπους λειτουργίας με συσχετιστικούς πίνακες, χρησιμοποιούνται πολύ λιγότερο συχνά από τους κανονικούς. Θα πρέπει να σημειωθεί ότι μπορούν ακόμα να είναι χρήσιμα για την αποθήκευση δεδομένων και να διευκολύνουν την απομνημόνευση των λεπτομερειών που πρέπει να προσπελαστούν.

Έξοδος πίνακα

Τι θα μάθουμε για το JavaScript τώρα; Εμφάνιση του πίνακα σε ένα παράθυρο διαλόγου (στην οθόνη της οθόνης), καθώς και εμφάνιση των τιμών των στοιχείων του πίνακα.

Εάν χρειάζεται να εμφανίσετε τις τιμές όλων των στοιχείων σε ένα πρόγραμμα, τότε είναι βολικό να χρησιμοποιήσετε τη δήλωση for. Είναι ενδιαφέρον ότι η μεταβλητή μετρητή for κανόνες χρησιμοποιείται ως ευρετήριο ενός συστατικού πίνακα.

Καθάρισμα

Για να φιλτράρετε έναν πίνακα JavaScript, πρέπει να μηδενίσετε το μήκος του:

  • var myArray = ;
  • myArray.length = 0.
  • clear: function() (;
  • this.length = 0;
  • επιστρέψτε αυτό?

Προσθήκη και αφαίρεση εξαρτημάτων

Λοιπόν, ας συνεχίσουμε να μελετάμε αυτήν την ενδιαφέρουσα γλώσσα JavaScript. Ένα στοιχείο πίνακα μπορεί να διαγραφεί ή να προστεθεί με τον ίδιο τρόπο όπως οι κανονικές ιδιότητες άλλων αντικειμένων. Υπάρχουν όμως κάποιες διαφορές: η προσθήκη αριθμητικών ιδιοτήτων μπορεί να αλλάξει την ποιότητα του μήκους και η τροποποίηση της ιδιότητας μήκους μπορεί να εξαλείψει τις αριθμητικές ιδιότητες. Κατ 'αρχήν, ο αλγόριθμος για τον καθορισμό ποιοτήτων για πίνακες είναι ο εξής:

  • Κατά την προσθήκη μιας άγνωστης ψηφιακής ιδιότητας i, εάν το μήκος είναι ίσο ή μικρότερο από i, το μήκος ορίζεται ως i+1.
  • Όταν αλλάζει η ποιότητα του μήκους, εκτελούνται οι ακόλουθες ενέργειες: εάν η εκχωρημένη τιμή είναι μικρότερη από το μηδέν, τότε εμφανίζεται ένα Σφάλμα εύρους. Όλες οι αριθμητικές ποιότητες και οι δείκτες που είναι ίσοι με το νέο μήκος και οι οποίοι είναι μεγαλύτεροι καταργούνται.

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

μεθόδους unshift, shift, pop και push

Αν και τα στοιχεία του πίνακα τροποποιούνται με μη αυτόματο τρόπο, πολλοί άνθρωποι συνιστούν τη χρήση ενσωματωμένων μεθόδων για αυτό. Είναι αυτή η απόχρωση που εγγυάται τη σωστή τιμή ποιότητας μήκους και την απουσία κενών στη διάταξη. Παρεμπιπτόντως, η σωστή ποιότητα μήκους θα αντιστοιχεί στον αριθμό των εξαρτημάτων.

Η μέθοδος push μετακινεί τα περασμένα μέρη στο τέλος του πίνακα. Η μέθοδος pop επιστρέφει το στοιχείο που ακολουθεί και το αφαιρεί.

Γενικά, στον Internet Explorer νεότερη από την όγδοη έκδοση, το unshift μπορεί να επιστρέψει απροσδιόριστο σε άλλα προγράμματα περιήγησης, μια νέα τιμή μήκους. Επομένως, είναι καλύτερα να μην βασίζεστε στην τιμή που επιστρέφεται από τη μη μετατόπιση.

Προσθήκη και εξάλειψη τμημάτων στη μέση ενός πίνακα

Αν χρειαστεί να διαγράψω έναν πίνακα JavaScript, τι πρέπει να κάνω; Η μέθοδος ματίσματος είναι γνωστό ότι έχει την υπογραφή Array.prototype.splice.

Αφαιρεί τα στοιχεία deleteCount από τον πίνακα, ξεκινώντας από την ένδειξη έναρξης. Εάν περάσουν περισσότερα από δύο ορίσματα, τότε όλα τα επόμενα ορίσματα στον πίνακα τοποθετούνται αντί των εξαλειφθέντων. Εάν η έναρξη είναι αρνητική, τότε ο δείκτης από τον οποίο θα συνεχιστεί η ανάληψη θα είναι ίσος με μήκος + έναρξη. Ο πίνακας επιστρέφεται από τα στοιχεία που αφαιρέθηκαν.

Στην πραγματικότητα, χρησιμοποιώντας τη μέθοδο splice, μπορείτε να αφαιρέσετε στοιχεία από τη μέση του πίνακα ή να προσθέσετε οποιονδήποτε αριθμό στοιχείων σε οποιοδήποτε σημείο του πίνακα.

Στην απλούστερη έκδοση, εάν χρειάζεται να αφαιρέσετε ένα στοιχείο με ευρετήριο i, πρέπει να ζητήσετε τη μέθοδο splice από τον πίνακα με τις παραμέτρους i και 1.

Κατ 'αρχήν, η δεύτερη παράμετρος της μεθόδου συναρμογής είναι προαιρετική, αλλά η συμπεριφορά μιας συνάρτησης με ένα όρισμα είναι διαφορετική σε κάθε πρόγραμμα περιήγησης.

Για παράδειγμα, στον Firefox, στις πιο πρόσφατες παραλλαγές του Opera, στο Safari και στο Chrome, όλες οι λεπτομέρειες μέχρι το τέλος του πίνακα θα αφαιρεθούν.

Κανένα στοιχείο δεν θα εξαλειφθεί στο IE. Στις πρώτες παραλλαγές του Opera, είναι αδύνατο να προβλεφθεί η συμπεριφορά - ένα μέρος με έναρξη ευρετηρίου - 1 θα αφαιρεθεί, επομένως, πρέπει πάντα να περάσετε τουλάχιστον δύο στοιχεία σε αυτήν τη μέθοδο.

Κλειδιά

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

ΒΡΕ (κλειδί).

INSERT (τιμή, κλειδί).

REMOVE (κλειδί).

Υποτίθεται ότι δύο ζεύγη με παρόμοια κλειδιά δεν μπορούν να αποθηκευτούν σε έναν συσχετιστικό πίνακα. Σε ένα ζεύγος k + v, το v ονομάζεται η τιμή που σχετίζεται με το κλειδί k. Η σημασιολογία και τα ονόματα των παραπάνω λειτουργιών μπορεί να διαφέρουν σε διαφορετικές υλοποιήσεις τέτοιων πινάκων.

Έτσι, η ενέργεια FIND (κλειδί) επιστρέφει την τιμή που σχετίζεται με το δεδομένο κλειδί ή κάποιο συγκεκριμένο αντικείμενο UNDEF που υποδεικνύει ότι δεν υπάρχει τιμή που να σχετίζεται με το δεδομένο κλειδί. Οι άλλες δύο ενέργειες δεν επιστρέφουν τίποτα (εκτός από το αν η επέμβαση ήταν επιτυχής).

Γενικά, από την άποψη της διεπαφής, είναι βολικό να θεωρηθεί ένας συσχετιστικός πίνακας ως ένας απλός πίνακας στον οποίο όχι μόνο ακέραιοι, αλλά και τιμές άλλων τύπων - για παράδειγμα, συμβολοσειρές - μπορούν να χρησιμοποιηθούν ως δείκτες.

Παρεμπιπτόντως, η υποστήριξη τέτοιων συστοιχιών είναι διαθέσιμη σε πολλές γλώσσες προγραμματισμού υψηλού επιπέδου, όπως PHP, Perl, Ruby, Python, Tcl, JavaScript και άλλες. Για γλώσσες που δεν διαθέτουν ενσωματωμένα εργαλεία για εργασία με συσχετιστικούς πίνακες, έχει δημιουργηθεί ένας κολοσσιαίος αριθμός υλοποιήσεων με τη μορφή βιβλιοθηκών.

Ένα παράδειγμα συσχετιστικού πίνακα είναι ένας τηλεφωνικός κατάλογος. Σε αυτή την έκδοση, το νόημα είναι το σύνθετο «F. I. O. + διεύθυνση”, και το κλειδί είναι ο αριθμός τηλεφώνου. Ένας αριθμός τηλεφώνου έχει έναν ιδιοκτήτη, αλλά ένα άτομο μπορεί να έχει πολλούς αριθμούς.

Συνειρμικές επεκτάσεις

Θα πρέπει να σημειωθεί ότι οι πιο διάσημες επεκτάσεις περιλαμβάνουν τα ακόλουθα:

  • ΚΑΘΕ - «Περάστε» όλα τα αποθηκευμένα ζεύγη.
  • CLEAR - αφαιρέστε όλες τις εγγραφές.
  • MIN - βρείτε το ζεύγος με τη μικρότερη τιμή κλειδιού.
  • MAX - βρείτε το ζεύγος με τη μεγαλύτερη τιμή κλειδιού.

Οι δύο τελευταίες επιλογές απαιτούν τα πλήκτρα να υποδεικνύουν την ενέργεια σύγκρισης.

Υλοποιήσεις συσχετιστικών πινάκων

Υπάρχουν πολλές διαφορετικές υλοποιήσεις ενός συσχετιστικού πίνακα. Η πιο κοινή υλοποίηση μπορεί να βασίζεται σε έναν απλό πίνακα του οποίου τα στοιχεία είναι ζεύγη (τιμή, κλειδί). Για να επιταχύνετε τις εργασίες αναζήτησης, μπορείτε να παραγγείλετε τα στοιχεία αυτού του πίνακα με το κλειδί και να εκτελέσετε την αναζήτηση χρησιμοποιώντας Αλλά αυτό θα αυξήσει το χρονικό διάστημα που απαιτείται για την προσθήκη ενός νέου ζεύγους, καθώς θα χρειαστεί να «απομακρυνθούν» τα στοιχεία του πίνακα για να συσκευάσει μια νέα εγγραφή στο κενό κελί που εμφανίζεται.

Οι πιο γνωστές υλοποιήσεις είναι αυτές που βασίζονται σε διάφορα δέντρα αναζήτησης. Για παράδειγμα, σε έναν τυπικό αναγνώστη C++ STL, το κοντέινερ χάρτη υλοποιείται με βάση ένα δέντρο μαύρου μαόνι. Τα στυλ Ruby, Tcl, Python χρησιμοποιούν έναν τύπο πίνακα κατακερματισμού. Υπάρχουν και άλλες υλοποιήσεις.

Γενικά, κάθε υλοποίηση έχει τα δικά της μειονεκτήματα και πλεονεκτήματα. Είναι σημαντικό και οι τρεις ενέργειες να εκτελούνται τόσο κατά μέσο όρο όσο και με τη χειρότερη απόχρωση κατά την περίοδο O(log n), όπου n είναι ο τρέχων αριθμός των ζευγών που αποθηκεύονται. Για αντιστοιχισμένα δέντρα αναζήτησης (συμπεριλαμβανομένων των μαύρων-κόκκινων δέντρων), αυτή η προϋπόθεση πληρούται.

Οι υλοποιήσεις που βασίζονται σε πίνακα κατακερματισμού είναι γνωστό ότι έχουν μέσο χρόνο O(1), ο οποίος είναι καλύτερος από τις υλοποιήσεις που βασίζονται σε δέντρο αναζήτησης. Φυσικά, αυτό δεν εγγυάται την υψηλή ταχύτητα εκτέλεσης μεμονωμένων λειτουργιών: ο χρόνος INSERT στη χειρότερη περίπτωση συμβολίζεται ως O(n). Η διαδικασία INSERT εκτελείται για μεγάλο χρονικό διάστημα όταν ο συντελεστής πλήρωσης φτάσει στο υψηλότερο σημείο του και το ευρετήριο του πίνακα κατακερματισμού πρέπει να ανακατασκευαστεί.

Παρεμπιπτόντως, αυτές οι λίστες κατακερματισμού είναι κακές επειδή στη βάση τους είναι αδύνατο να πραγματοποιηθούν γρήγορες πρόσθετες ενέργειες MAX, MIN και ένας αλγόριθμος για τη διέλευση όλων των αποθηκευμένων ζευγών με φθίνουσα ή αύξουσα σειρά κλειδιών.



Συνιστούμε να διαβάσετε

Κορυφή