Δήλωση ενός δισδιάστατου πίνακα javascript. Πίνακες

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

Chercher

Παιδικά προϊόντα

Είναι παρόμοιο με άλλες μεταβλητές στο ότι μπορεί να αποθηκεύσει οποιοδήποτε τύπο δεδομένων. Αλλά ένας πίνακας έχει μια σημαντική διαφορά από μια μεταβλητή: μπορεί να αποθηκεύσει περισσότερα από ένα στοιχεία τη φορά.

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

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

Η σειρά των στοιχείων του πίνακα ξεκινά από το 0. Αποδεικνύεται ότι ο πίνακας θα έχει πάντα ένα δείκτη μετατόπισης κατά ένα: το πρώτο στοιχείο θα έχει δείκτη 0, το δεύτερο 1 κ.λπ.

Ακολουθεί ένα παράδειγμα πίνακα με στοιχεία διαφορετικών τύπων:

Δημιουργία (δήλωση) πίνακα

Οι πίνακες είναι πολύ βολικοί γιατί μπορούν να αποθηκεύσουν όσα δεδομένα χρειάζεστε. Το μέγιστο δυνατό μέγεθος ενός πίνακα js είναι 2 32 στοιχεία.

Πρέπει να πούμε στη JavaScript ότι θέλουμε να δημιουργήσουμε έναν πίνακα. Υπάρχουν δύο επιλογές για αυτό: η τιμή σε αγκύλες ή λέξη-κλειδίνέος.

Σύντομη σημειογραφία: χρήση αγκύλων

Κρατούμενος μέσα αγκύλεςμια λίστα τιμών που χωρίζονται με κόμμα.

var myArray = [ "Jack", "Sawyer", "John", "Desmond" ];

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

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

Για να δηλώσετε έναν κενό πίνακα, αφήστε κενές τις παρενθέσεις:

var myArray = ;

Long entry: χρησιμοποιώντας τον κατασκευαστή Array().

var lostArray = νέος πίνακας ("Jack", "Sawyer", "John", "Desmond"); var twinPeaksArray = new Array("Laura", 2, ["Bob", "Leland", "Dale"]);

Η νέα λέξη-κλειδί λέει στη JavaScript να δημιουργήσει έναν νέο πίνακα οι τιμές του οποίου μεταβιβάζονται ως παράμετροι.

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

var myArray = νέος πίνακας(80);

Η παραπάνω έκφραση θα δημιουργήσει έναν κενό πίνακα που αποτελείται από 80 υποδοχές με απροσδιόριστες τιμές.

Δήλωση κενού πίνακα:

var myArray = new Array();

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

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

var myArray = ["Jack", "Sawyer", "John", "Desmond"]; console.log(myArray); // Εκτυπώνει το "Jack" console.log(myArray); // Εκτυπώνει "Desmond"

Ένας πίνακας μπορεί να έχει πολλά επίπεδα, δηλαδή κάθε στοιχείο μπορεί να είναι από μόνο του ένας πίνακας. Το αποτέλεσμα θα είναι ένας δισδιάστατος πίνακας js. Πώς μπορούμε να έχουμε πρόσβαση σε αυτούς τους πίνακες που βρίσκονται μέσα σε άλλους - «πολυδιάστατους πίνακες»;

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

var familyArray = ["Marge", "Homer", ["Bart", "Lisa", "Maggie"]];

Μπορείτε να το φανταστείτε έτσι:

Για να ανατρέξετε στην τιμή "Lisa":

var lisa = familyArray; console.log(lisa); // εμφανίζει "Lisa"

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

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

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

var myArray = ["Kate", "Sun"]; myArray = "Ιουλιέτα"; console.log(myArray); // Εκτυπώνει "Kate, Sun, Juliet"

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

var myArray = ["Kate", "Sun"]; myArray = "Ιουλιέτα"; console.log(myArray.length); // Εκτυπώνει το "6" console.log(myArray); // Εκτυπώνει ["Kate", "Sung", undefined, undefined, undefined, "Juliet"]

Μπορείτε να μάθετε ποιο είναι το μήκος ενός πίνακα js χρησιμοποιώντας την ιδιότητα length. Στο παραπάνω παράδειγμα, υπάρχουν έξι στοιχεία στον πίνακα και σε τρία από αυτά δεν έχει δοθεί τιμή - επισημαίνονται ως μη καθορισμένα .

μέθοδος push().

Χρησιμοποιώντας τη μέθοδο push(), μπορείτε να προσθέσετε ένα ή περισσότερα στοιχεία σε έναν πίνακα js. Η Push() δέχεται απεριόριστο αριθμό παραμέτρων, όλες από τις οποίες θα προστεθούν στο τέλος του πίνακα.

var myArray = ["Kate", "Sut"]; myArray.push("Ιουλιέτα"); // Προσθέτει το στοιχείο "Juliet" στο τέλος του πίνακα myArray.push("Libby", "Shannon" // Προσθέτει τα στοιχεία "Libby" και "Shannon" στο τέλος του πίνακα console.log(myaArray); ) // Εκτυπώνει ["Kate", "Soon", "Juliet", "Libby", "Shannon"]

μέθοδος unshift().

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

var myArray = ["Kate", "Sun"]; myArray.unshift("Ιουλιέτα"); // Προσθέτει το στοιχείο "Juliet" στην αρχή του πίνακα myArray.unshift("Libby", "Shannon"); // Προσθέτει τα στοιχεία "Libby" και "Shannon" στην αρχή του πίνακα console.log(myArray); // Έξοδοι ["Libby", "Shannon", "Juliet", "Kate", "Soon"]

Κατάργηση των μεθόδων Pop() και shift() στοιχείων πίνακα

Οι μέθοδοι pop() και shift() αφαιρούν το τελευταίο και το πρώτο στοιχείο ενός πίνακα, αντίστοιχα:

var myArray = ["Jack", "Sawyer", "John", "Desmond", "Kate"]; myArray.pop(); // Αφαιρεί το στοιχείο "Kate" myArray.shift(); // Καταργεί το στοιχείο "Jack" console.log(myArray); // Εκτυπώσεις ["Sawyer", "John", "Desmond"]

μέθοδος splice().

Χρησιμοποιώντας τη μέθοδο splice(), μπορείτε να αφαιρέσετε ή να προσθέσετε στοιχεία σε έναν πίνακα, ενώ προσδιορίζετε με ακρίβεια το ευρετήριο των στοιχείων.

Το παρακάτω παράδειγμα χρησιμοποιεί τη μέθοδο splice() για να προσθέσει δύο στοιχεία, ξεκινώντας από τον δείκτη 2 (δηλαδή, το τρίτο στοιχείο):

var fruitArray = ["μήλο", "ροδάκινο", "πορτοκάλι", "λεμόνι", "λάιμ", "κεράσι"]; fruitArray.splice(2, 0, "melon", "banana"); console.log(fruitArray); // Έξοδοι ["μήλο", "ροδάκινο", "πεπόνι", "μπανάνα", "πορτοκάλι", "λεμόνι", "λάιμ", "κεράσι"]

Η πρώτη παράμετρος της μεθόδου splice() είναι ο δείκτης. Υποδεικνύει σε ποια θέση πρέπει να προστεθούν/αφαιρηθούν στοιχεία. Στο παράδειγμά μας, επιλέξαμε το δείκτη 2 (με την τιμή "πορτοκαλί").

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

Οι παρακάτω παράμετροι είναι προαιρετικές. Προσθέτουν νέες τιμές στον πίνακα. Στην περίπτωσή μας, πρέπει να προσθέσουμε "πεπόνι" και "μπανάνα", ξεκινώντας με τον δείκτη 2.

Σε αυτό το άρθρο θα εξετάσουμε έναν πίνακα 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

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

Η μέθοδος ώθησης μετακινεί τα περασμένα μέρη στο τέλος του πίνακα. Η μέθοδος 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 και ένας αλγόριθμος για τη διέλευση όλων των αποθηκευμένων ζευγών σε φθίνουσα ή αύξουσα σειρά πλήκτρων.

  • Μετάφραση
  • I. Επανάληψη σε πραγματικούς πίνακες
  • για κάθε μέθοδο και σχετικές μεθόδους
  • για βρόχο
  • Σωστή χρήσηγια...σε βρόχο
  • for...of loop (σιωπηρή χρήση επαναλήπτη)
  • Ρητή χρήση επαναληπτικού
  • Χρήση μεθόδων για επανάληψη σε πραγματικούς πίνακες
  • Μετατροπή σε πραγματικό πίνακα
  • Σημείωση για αντικείμενα χρόνου εκτέλεσης
I. Αριθμός πραγματικών πινάκων On αυτή τη στιγμήΥπάρχουν τρεις τρόποι για να επαναλάβετε τα στοιχεία ενός πραγματικού πίνακα:
  • μέθοδος Array.prototype.forEach ;
  • κλασικό για βρόχο
  • ένα "σωστά" κατασκευασμένο για...in loop.
  • Επιπλέον, σύντομα, με την έλευση του νέου προτύπου ECMAScript 6 (ES 6), αναμένονται δύο ακόμη μέθοδοι:
  • for...of loop (σιωπηρή χρήση του επαναλήπτη);
  • ρητή χρήση επαναληπτικού.
  • 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

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

    Κορυφή