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

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

Παράδειγμα. Χρησιμοποιούμε έναν δισδιάστατο πίνακα για να δημιουργήσουμε έναν πίνακα πολλαπλασιασμού.

var matrix = new Array(10); // υπάρχουν 10 σειρές στον πίνακα

for(var j = 0; j< matrix.length; j++)

matrix[j] = new Array(10); //d κάθε σειρά δημιούργησε 10 στήλες

for(var row = 0; row< matrix.length; row++) {

for(col = 0; col< matrix .length; col++) {

matrix = row*col; // πλήρωση στοιχείων πίνακα

var αποτέλεσμα = μήτρα ; // αποτέλεσμα πολλαπλασιασμού 24

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

menu = new Array();

μενού = νέος πίνακας ("Επιλογή 1.1", "Επιλογή 1.2", ", "Επιλογή 1.3");

μενού = νέος πίνακας ("Επιλογή 2.1", "Επιλογή 2 . 2");

μενού = νέος πίνακας ("Επιλογή 3.1", "Επιλογή 3.2", "Επιλογή 3.3", "Επιλογή 3.4");

Για να αποκτήσετε πρόσβαση στην 1η επιλογή του 2ου υπομενού, πρέπει να γράψετε:

Η τιμή του μενού // είναι "Επιλογή 2.1".

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

μενού = νέος πίνακας ()

menu = νέος πίνακας ("Menu1", "Menu2", "Menu3");

menu = new Array();

μενού = νέος πίνακας ("Επιλογή 1.1", "Επιλογή 1.2", "Επιλογή 1.3");

μενού = νέος πίνακας ("Επιλογή 2.1", "Επιλογή 2. 2");

μενού = νέος πίνακας ("Επιλογή 3.1", "Επιλογή 3.2", "Επιλογή 3.3", "Επιλογή 3.4");

μενού // η τιμή είναι "Menu2"

μενού // η τιμή είναι "Menu3"

μενού // η τιμή είναι "Επιλογή 2.1"

μενού // η τιμή είναι "Επιλογή 3.2"

Μέθοδοι Πίνακας

ΣΕ αυτός ο τομέαςΑς δούμε τις μεθόδους με τις οποίες μπορείτε να χειριστείτε τα στοιχεία των πινάκων.

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

var arr = ; // δίνεται ένας πίνακας τριών στοιχείων

varstr = arr.join(); // η τιμή str είναι "12,23,38"

str = arr.join("; "); // str == "12; 23; 38"

Όπως αναφέρθηκε προηγουμένως, η μέθοδος Array.join() είναι το αντίστροφο της μεθόδου String.split(), η οποία χωρίζει τις συμβολοσειρές σε στοιχεία πίνακα.

ΑΝΤΙΣΤΡΟΦΗ() -μια μέθοδος που αντιστρέφει τη σειρά των στοιχείων σε έναν πίνακα. Αυτή η μέθοδοςδεν δημιουργεί νέο πίνακα, αλλά αλλάζει τη σειρά τους στον αρχικό πίνακα.

var arr = new Array(1,2,3); // arr = 1, arr = 2, arr = 3

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

var str = arr.join(); // str == "3,2,1"

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

var arr = new Array("banana", "sherry", "apple");

varstr = arr.join(", "); // str == "μήλο, μπανάνα, κεράσι"

Εάν υπάρχει ένα απροσδιόριστο στοιχείο στον πίνακα, αυτό μετακινείται στο τέλος του πίνακα.

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

Ας ταξινομήσουμε με αριθμητική σειρά.

var arr = ;

arr.sort(); // με αλφαβητική σειρά: 11111, 2222, 333, 44

arr.sort(function(first,second) ( //

επιστροφή πρώτος - δεύτερος? )); // Αριθμητική σειρά: 44, 333, 2222, 11111

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

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

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

var arr = ;

arr.concat(4, 5) // αποτέλεσμα

αρ. concat(); // αποτέλεσμα

αρ. concat (,) // αποτέλεσμα

αρ. concat (4, ]) // αποτέλεσμα ]

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

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

var arr = ;

arr.slice(0,3); // ΕΠΙΣΤΡΟΦΗ

αρ. φέτα (3); // ΕΠΙΣΤΡΟΦΗ

αρ. φέτα (1,-1); // ΕΠΙΣΤΡΟΦΗ

αρ. φέτα (-3,-2); // ΕΠΙΣΤΡΟΦΗ

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

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

var arr = ;

arr.splice(4); // επιστρέφει ; Το arr γίνεται ίσο με

arr.splice(1,2); // επιστρέφει ; Το arr γίνεται ίσο με

Τα δύο ορίσματα στη μέθοδο splice(), τα οποία καθορίζουν τα στοιχεία του πίνακα που πρέπει να αφαιρεθούν, μπορούν να ακολουθηθούν από οποιοσδηποτε ΑΡΙΘΜΟΣπρόσθετα ορίσματα που καθορίζουν τα στοιχεία που θα εισαχθούν στον πίνακα, ξεκινώντας από τον δείκτη που δίνεται από το πρώτο όρισμα της μεθόδου.

var arr = ;

arr.splice(2,0"ab","cd"); /* θα επιστρέψει ; Το arr γίνεται */

arr.splice(2,2,,3); /* θα επιστρέψει ["ab","cd"]; Το arr γίνεται ,3,33,44,55] */

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

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

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

var stack = ; // άδεια στοίβα

stack.push(1,2); // πίνακας: θα επιστρέψει 2

σωρός. κρότος(); // πίνακας: θα επιστρέψει 2

stack.push(3); // πίνακας: θα επιστρέψει 2

stack.pop(); // πίνακας: θα επιστρέψει 3

stack.push(); // πίνακας: ] θα επιστρέψει 2

σωρός. pop() // array: θα επιστρέψει

σωρός. κρότος(); // πίνακας: θα επιστρέψει 1

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

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

var arr = ; // arr:

arr.unshift(1); // arr: θα επιστρέψει 1

arr.unshift(22); // arr: θα επιστρέψει 2

arr.shift(); // arr: θα επιστρέψει 22

arr.unshift(3,); // arr:,1] θα επιστρέψει 3

arr.shift(); // arr:[,1] θα επιστρέψει 3

arr.shift(); // arr: θα επιστρέψει

arr.shift(); // arr: θα επιστρέψει 1

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

toString() και toLocaleString()- μέθοδοι που μετατρέπουν καθένα από τα στοιχεία του πίνακα σε συμβολοσειρά και εμφανίζουν μια λίστα με τις λαμβανόμενες συμβολοσειρές διαχωρισμένες με κόμματα. Η μέθοδος toString(), όπως έχει ήδη σημειωθεί, είναι διαθέσιμη για οποιοδήποτε αντικείμενο στο JavaScript, συμπεριλαμβανομένου ενός πίνακα. Λάβετε υπόψη ότι ως αποτέλεσμα της λειτουργίας των μεθόδων, δεν παραμένουν ούτε αγκύλες ούτε άλλοι οριοθέτες γύρω από τις τιμές του πίνακα.

ToString() // θα επιστρέψει "1,2,3"

["a", "b", "c"].toString() // επιστρέφει "a,b,c"

].toString() // θα επιστρέψει "1,2,s"

Η μέθοδος toString() θα επιστρέψει την ίδια συμβολοσειρά με τη μέθοδο join() εάν καλείται χωρίς παραμέτρους.

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

Παράδειγμα 1. Δημιουργία κυκλικού banner (προβολή διαφανειών).

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

Αλλαγή εικόνας

Παράδειγμα 2. Εμφάνιση ενός τυχαίου αφορισμού σε μια σελίδα. Κάθε φορά που ανανεώνεται η σελίδα εμφανίζεται ένας τυχαίος αφορισμός.

Τυχαίος αφορισμός στη σελίδα

αντικείμενο ημερομηνίας

ΣΕ Αντικείμενο JavaScriptΗ ημερομηνία έχει σχεδιαστεί για να λειτουργεί με τιμές ημερομηνίας και ώρας. Ένα στιγμιότυπο αντικειμένου δημιουργείται από τον κατασκευαστή Date() χρησιμοποιώντας τον νέο τελεστή.

var new_day = new Date();/* Έχει δημιουργηθεί μια παρουσία ενός αντικειμένου που αποθηκεύει πληροφορίες σχετικά με την τρέχουσα ώρα και ημερομηνία (διαβάζει την ώρα συστήματος του υπολογιστή). */

var Χριστούγεννα = νέα ημερομηνία (2016, 11, 25);/* Δημιουργείται ένα παράδειγμα αντικειμένου με ημερομηνία Χριστουγέννων. Οι αριθμοί μηνών βασίζονται στο μηδέν, επομένως ο Δεκέμβριος αριθμείται 11 */

Οι μέθοδοι που ορίζονται στο αντικείμενο Date() σάς επιτρέπουν να ορίζετε και να αποθηκεύετε διάφορες ώρες και ημερομηνίες και να εκτελείτε μια σειρά ενεργειών σε αυτές χρησιμοποιώντας είτε τοπική ώρα είτε Μέση ώρα Γκρίνουιτς (GMT).

Christmas.setFullYear(xmas.getFullYear() + 1);/* Ημερομηνία Χριστουγέννων του επόμενου έτους */

var weekday = Christmas.getDay();// Ημέρα της εβδομάδας των Χριστουγέννων.

document.write("Σήμερα: " + new_day.toLocaleString());// Τιμή συμβολοσειράς της τρέχουσας ημερομηνίας και ώρας.

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

Ο κατασκευαστής κατά τη δημιουργία μιας νέας παρουσίας του αντικειμένου Date() μπορεί να χρησιμοποιηθεί σε παρακάτω επιλογές:

new Date();/* Ο κατασκευαστής Date() χωρίς ορίσματα δημιουργεί ένα αντικείμενο του οποίου η τιμή είναι ίση με την τρέχουσα ημερομηνία και ώρα. */

new Date(number_milliseconds);/* Μια απλή αριθμητική τιμή καθορίζεται στον κατασκευαστή και χρησιμοποιείται ως αναπαράσταση χιλιοστού του δευτερολέπτου της ημερομηνίας, η οποία είναι ίδια με την τιμή που επιστρέφεται από τη μέθοδο getTime().*/

new Date(date_string_representation);/* Εάν ένα όρισμα μεμονωμένης συμβολοσειράς δοθεί στον κατασκευαστή, αντιμετωπίζεται ως αναπαράσταση συμβολοσειράς μιας ημερομηνίας στη μορφή που δέχεται η μέθοδος Date.parse(). */

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

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

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

num_milliseconds είναι ο αριθμός των χιλιοστών του δευτερολέπτου μεταξύ της επιθυμητής ημερομηνίας και των μεσάνυχτων, 1 Ιανουαρίου 1970 (UTC). Ας υποθέσουμε ότι εάν το όρισμα είναι 5000, θα δημιουργηθεί μια ημερομηνία που είναι πέντε δευτερόλεπτα μετά τα μεσάνυχτα της 01/01/1970.

date_string_representation - Το όρισμα καθορίζει μια ημερομηνία και μια προαιρετική ώρα ως συμβολοσειρά. Η συμβολοσειρά πρέπει να είναι σε μορφή που κατανοεί η μέθοδος Date.parse().

έτος - τέσσερα ψηφία του έτους. Για συμβατότητα με προηγούμενες υλοποιήσεις JavaScript, εάν η τιμή ενός ορίσματος είναι μεταξύ 0 και 99, ο αριθμός 1900 προστίθεται στην τιμή του.

Η ημέρα είναι ένας ακέραιος αριθμός από το 1 έως το 31 που αντιπροσωπεύει την ημέρα του μήνα. Το όρισμα είναι προαιρετικό.

Οι ώρες είναι ένας ακέραιος αριθμός από το 0, που σημαίνει τα μεσάνυχτα, έως το 23. Το όρισμα είναι προαιρετικό.

Τα λεπτά είναι ακέραιος από το 0 έως το 59. Το όρισμα είναι προαιρετικό.

δευτερόλεπτα. Δευτερόλεπτα σε λεπτά, που προσδιορίζονται ως ακέραιος από το 0 έως το 59. Προαιρετικό όρισμα.

χιλιοστά του δευτερολέπτου είναι ο αριθμός των χιλιοστών του δευτερολέπτου που καθορίζεται ως ακέραιος μεταξύ 0 και 999. Το όρισμα είναι προαιρετικό.

Τελευταία ενημέρωση: 04/09/2018

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

var myArray = new Array();

Υπάρχει επίσης ένας συντομότερος τρόπος για να αρχικοποιήσετε έναν πίνακα:

Var myArray = ;

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

Var people = ["Tom", "Alice", "Sam"]; αρχείο καταγραφής κονσόλας (άτομα);

Σε αυτήν την περίπτωση, ο πίνακας myArray θα έχει τρία στοιχεία. Γραφικά, μπορεί να αναπαρασταθεί ως εξής:

Τα ευρετήρια χρησιμοποιούνται για πρόσβαση σε μεμονωμένα στοιχεία πίνακα. Η μέτρηση ξεκινά από το μηδέν, δηλαδή, το πρώτο στοιχείο θα έχει δείκτη 0 και το τελευταίο θα έχει δείκτη 2:

Var people = ["Tom", "Alice", "Sam"]; αρχείο καταγραφής κονσόλας (άτομα); // Tom var person3 = άνθρωποι; // Sam console.log(person3); // Ο Σαμ

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

Var people = ["Tom", "Alice", "Sam"]; αρχείο καταγραφής κονσόλας (άτομα); // απροσδιόριστο

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

Var people = ["Tom", "Alice", "Sam"]; αρχείο καταγραφής κονσόλας (άτομα); // Tom people = "Bob"; αρχείο καταγραφής κονσόλας (άτομα); // Μπομπ

Επιπλέον, σε αντίθεση με άλλες γλώσσες, όπως η C# ή η Java, μπορείτε να εγκαταστήσετε ένα στοιχείο που δεν είναι αρχικά εγκατεστημένο:

Var people = ["Tom", "Alice", "Sam"]; αρχείο καταγραφής κονσόλας (άτομα); // undefined - υπάρχουν μόνο τρία στοιχεία στον πίνακα people = "Bob"; αρχείο καταγραφής κονσόλας (άτομα); // Μπομπ

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

Var αντικείμενα = ["Tom", 12, true, 3.14, false]; αρχείο καταγραφής κονσόλας (αντικείμενα);

χειριστή spread

Ο τελεστής spread ... σας επιτρέπει να λαμβάνετε τιμές από έναν πίνακα ξεχωριστά:

έστω αριθμοί = ; αρχείο καταγραφής κονσόλας (...αριθμοί); // 1 2 3 4 console.log(numbers); //

Ο τελεστής spread τοποθετείται πριν από τον πίνακα. Ως αποτέλεσμα, η έκφραση...numbers θα επιστρέψει ένα σύνολο αριθμών, αλλά δεν θα είναι πίνακας, αλλά μεμονωμένες τιμές.

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

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

var numbers1 = ; // μονοδιάστατος πίνακας var numbers2 = [, ]; // δισδιάστατος πίνακας

Οπτικά, και οι δύο πίνακες μπορούν να αναπαρασταθούν ως εξής:

Μονοδιάστατοι αριθμοί πίνακα1

Για να ληφθεί ένα μεμονωμένο στοιχείο ενός πίνακα, χρησιμοποιείται επίσης ένα ευρετήριο:

Var tomInfo = άνθρωποι;

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

Console.log("Όνομα: " + άτομα); // Tom console.log("Ηλικία: " + άτομα); // 25

Δηλαδή, εάν μπορούμε να αναπαραστήσουμε οπτικά έναν δισδιάστατο πίνακα ως πίνακα, τότε το στοιχείο άτομα θα αναφέρεται στο κελί του πίνακα που βρίσκεται στη διασταύρωση της πρώτης σειράς και της δεύτερης στήλης (η πρώτη διάσταση είναι 0 - σειρά, η δεύτερη διάσταση - 1 - στήλη).

Μπορούμε επίσης να κάνουμε μια εργασία:

Var people = [ ["Tom", 25, false], ["Bill", 38, true], ["Alice", 21, false] ]; άτομα = 56; // εκχώρηση ξεχωριστής τιμής console.log(people); // 56 άτομα = ["Bob", 29, false]; // εκχώρηση πίνακα console.log(people); // Μπομπ

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

varnumbers = ; αριθμοί = ; // τώρα οι αριθμοί είναι ένας δισδιάστατος πίνακας αριθμοί=; // τώρα οι αριθμοί είναι ένας τρισδιάστατος πίνακας αριθμοί = 5; // το πρώτο στοιχείο του πίνακα 3D είναι 5 console.log(numbers);

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

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

Επί αυτή τη στιγμήΥπάρχουν τρεις τρόποι επανάληψης πάνω από τα στοιχεία ενός πραγματικού πίνακα:
  1. μέθοδος Array.prototype.forEach ;
  2. κλασικό για βρόχο?
  3. Ένα «καλοσχηματισμένο» for...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. Ο βρόχος for

Παλιό καλό για βράχους:

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 (σιωπηρή χρήση επαναληπτικού)

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

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

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

Ένα παράδειγμα χρήσης για...των:

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 σε έναν πραγματικό πίνακα, θα χρειαστείτε κώδικα όπως αυτός:

Vardivs = Array.prototype.slice.call(document.querySelectorAll("div"), 0);
εκσυγχρονίζω: Όπως σημειώνεται στα σχόλια των rock and torbasow , στο ES6 μπορείτε να χρησιμοποιήσετε την πιο περιγραφική μέθοδο Array.from αντί για Array.prototype.slice .

3. Σημείωση για τα αντικείμενα χρόνου εκτέλεσης

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

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

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

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

Πώς δημιουργούνται οι πολυδιάστατοι πίνακες και σε τι χρησιμεύουν;

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

συστοιχία =

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

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

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

Όλα θα μοιάζουν με αυτό:

var results = [ ["Markus", 333], ["Natasha", 211], ["Alex", 124] ];

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

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

Για να εμπεδώσετε το υλικό, αναλύστε ένα μικρό πρόγραμμα.

Η τιμή των αποτελεσμάτων =

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

Τρόποι ταξινόμησης δεδομένων

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

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

Alexey, 124

Μάρκους, 333

Νατάσα, 211

Και αν ανταλλάξετε τα στοιχεία σε κάθε ένθετο πίνακα, θα λάβετε:

124, Alexey

211, Νατάσα

333, Μάρκους

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

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

  • ένας θετικός αριθμός (γενικά επιλέξτε 1) εάν το πρώτο καθορισμένο στοιχείο ακολουθεί το δεύτερο κατά τη σύγκριση.
  • έναν αρνητικό αριθμό (συνήθως -1) εάν το δεύτερο επιλεγμένο στοιχείο ακολουθεί το πρώτο.
  • null εάν οι δύο τιμές που ελέγχονται είναι ίσες.

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

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

Πίνακας καταγραφής:

Αλλά στη δεύτερη μέθοδο, άφησα ανέπαφη τη λογική ταξινόμησης, αλλά χρησιμοποίησα μια πρόσθετη μέθοδο - ΑΝΤΙΣΤΡΟΦΗ(). Όπως υποδηλώνει το όνομα, η αντίστροφη αντιστρέφει τη σειρά των στοιχείων.

Έτσι η συνάρτηση sort() θα μοιάζει με αυτό:

1 2 3 4 5 συνάρτηση RecordSort(a, b) (αν (a > b) επιστρέφει 1, αλλιώς εάν (a< b) return -1; else return 0; }

συνάρτηση RecordSort(a, b) (αν (a > b) επιστρέφει 1, αλλιώς εάν (a< b) return -1; else return 0; }

Και μετά, προσθέστε την παραπάνω μέθοδο.

Το συμπέρασμα βγαίνει με παρόμοιο τρόπο.

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

Λοιπόν, μίλησα για πολυδιάστατους πίνακες και την ταξινόμηση τους. Εάν σας άρεσε το άρθρο, εγγραφείτε στο blog και διαβάστε άλλες εξίσου ενδιαφέρουσες δημοσιεύσεις. Θα είμαι ευγνώμων για τις αναδημοσιεύσεις. Τα λέμε σύντομα!

Αντίο!

Με εκτίμηση, Roman Chueshov

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

var fruits = ["Μήλο", "Πορτοκάλι", "Γάιδαρος"]

Για να εξαγάγετε ένα στοιχείο, βάλτε τον δείκτη του σε αγκύλες. Πρώτος δείκτης 0:

var fruits = ["Μήλο", "Πορτοκάλι", "Γάιδαρος"] alert(fruits) alert(fruits) alert(fruits)

Μπορούμε επίσης να λάβουμε το μήκος ενός πίνακα JavaScript:

var fruits = ["Apple", "Orange", "Donkey"] alert(fruits.length)

Ωχ! Δημιουργήσαμε μια συστοιχία με δύο φρούτα και έναν γάιδαρο. Τώρα πρέπει να αφαιρέσουμε τον γάιδαρο.

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

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

Το ακόλουθο παράδειγμα δείχνει πώς ανακτάται το "Donkey" από έναν πίνακα:

var fruits = ["Apple", "Orange", "Donkey"] alert("I'm deletes "+fruits.pop()) // Τώρα έχουμε μόνο ["Apple","Orange"] alert("Now το μέγεθος του πίνακα : "+φρούτα.μήκος) // ο γάιδαρος αφαιρέθηκε

Σημειώστε ότι το pop τροποποιεί τον ίδιο τον πίνακα.

Το αντίστοιχο του Pop είναι η μέθοδος push, η οποία προσθέτει ένα στοιχείο σε έναν πίνακα. Για παράδειγμα, ξεχάσαμε να προσθέσουμε ένα ροδάκινο:

var fruits = ["Μήλο", "Πορτοκάλι"] fruits.push("Ροδάκινο"); // τώρα έχουμε ["Apple", "Orange", "Peach"] alert("Last item:"+fruits)

  1. Δημιουργία στυλ πίνακα με στοιχεία " Τζαζ”, “Ακεφιά”;
  2. Προσθέστε αξία " ροκ'ν'ρολ«;
  3. Αντικαταστήστε τη δεύτερη τιμή από το τέλος με την τιμή " κλασσικός". Θα πρέπει να καταλήξετε με έναν πίνακα: Τζαζ”, ”κλασσικός”, ”ροκ'ν'ρολ". Ο κώδικας πρέπει να λειτουργεί για οποιοδήποτε μήκος πίνακα.
  4. Εξάγετε την τελευταία τιμή από τον πίνακα και εμφανίστε την μέσω ειδοποίησης.

Λύση

// 1 var styles = ["Jazz", "Bluez"] // 2 styles.push("Rock"n"Roll") // or: styles = "Rock"n"Roll" // 3 styles = "Classic " // 4 ειδοποίηση(styles.pop())

μετατόπιση/κατάργηση μετατόπισης

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

var fruits = ["Apple", "Orange"] var apple = fruits.shift() // τώρα έχουμε μόνο ["Orange"] fruits.unshift("Lemon") // τώρα έχουμε ["Lemon", " Πορτοκαλί"] alert(φρούτα. μήκος) // 2

Τόσο το shift όσο και το unshift μπορούν να λειτουργήσουν σε πολλά στοιχεία ταυτόχρονα:

var fruits = ["Μήλο"] fruits.push("Πορτοκάλι","Ροδάκινο") fruits.unshift("Ανανάς","Λεμόνι") // ο πίνακας τώρα μοιάζει με αυτό: ["Ανανάς", "Λεμόνι", " Apple ", "Orange", "Peach"]

Εργασία για αυτοεκπλήρωση

Γράψτε κώδικα για να ειδοποιήσετε μια τυχαία τιμή από τον πίνακα arr :

var arr = ["Δαμάσκηνο","Πορτοκάλι","Γάιδαρος","Καρότο","JavaScript"]

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

var rand = min + Math.floor(Math.random()*(max+1-min))

Λύση

Πρέπει να εξαγάγουμε έναν τυχαίο αριθμό μεταξύ 0 και arr.length-1 (συμπεριλαμβανομένου):

var arr = ["Δαμάσκηνο","Πορτοκαλί","Γάιδαρος","Καρότο","JavaScript"] var rand = Math.floor(Math.random()*arr.length) alert(arr)

Επανάληψη σε έναν πίνακα

Στο JavaScript, η επανάληψη σε έναν πίνακα γίνεται με έναν βρόχο for:

var fruits = ["Ανανάς", "Λεμόνι", "Μήλο", "Πορτοκάλι", "Ροδάκινο"] for(var i=0; i

Εργασία για αυτοεκπλήρωση

Δημιουργήστε μια συνάρτηση find(arr,value) που βρίσκει μια τιμή σε έναν δεδομένο πίνακα και επιστρέφει το ευρετήριό του ή -1 εάν δεν βρεθεί τιμή.

Για παράδειγμα:

arr = [ "test", 2, 1.5, false ] find(arr, "test") // 0 find(arr, 2) // 1 find(arr, 1.5) // 2 find(arr, 0) // -1

Λύση

Μια πιθανή λύση μπορεί να μοιάζει με αυτό:

συνάρτηση find(array, value) (για(var i=0; i

Αλλά αυτό δεν είναι αλήθεια γιατί το == δεν καθορίζει τη διαφορά μεταξύ 0 και false .

Είναι πιο σωστό να χρησιμοποιείτε === όταν εργάζεστε με πίνακες σε JavaScript. Επιπλέον, το πιο πρόσφατο πρότυπο ES5 περιέχει τη συνάρτηση Array#indexOf. Με αυτό, μπορούμε να ορίσουμε μια συνάρτηση όπως αυτή:

συνάρτηση find(array, value) (if (array.indexOf) return array.indexOf(value) for(var i=0; i

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

Εργασία για αυτοεκπλήρωση

Δημιουργήστε μια συνάρτηση filterNumeric(arr) που παίρνει έναν πίνακα και επιστρέφει έναν νέο πίνακα που περιέχει μόνο τις αριθμητικές τιμές από το arr.

Ένα παράδειγμα για το πώς πρέπει να λειτουργεί:

arr = ["a", 1, "b", 2]; arr = filterNumeric(arr); // τώρα arr =

Λύση

Η λύση είναι να επαναλάβετε τον πίνακα και να προσθέσετε τις τιμές στον νέο πίνακα εάν είναι αριθμητικές.

ενώνονται και χωρίζονται

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

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

var fruits = ["Λεμόνι","Μήλο","Πορτοκάλι","Ροδάκινο"]; varstr = fruits.join(", "); alert(str);

Ο αντίστροφος μετασχηματισμός γίνεται εύκολα χρησιμοποιώντας τη μέθοδο split:

var fruits = "Μήλο, Πορτοκάλι, Ροδάκινο"; vararr = fruits.split(","); // Το arr περιέχει τώρα ["Apple", "Orange", "Peach"] alert(arr);

Εργασία για αυτοεκπλήρωση

Το αντικείμενο περιλαμβάνει την ιδιότητα className, η οποία περιέχει τα ονόματα κλάσεων διαχωρισμένα με κενά:

Γράψτε μια συνάρτηση addClass(obj, cls) που προσθέτει την κλάση cls, αλλά μόνο εάν δεν υπάρχει:

ddClass(obj, "new") // obj.className="open menu new" addClass(obj, "open") // αμετάβλητο (η κλάση υπάρχει ήδη) addClass(obj, "me") // obj.className= " ανοιχτό μενού νέος μου" alert(obj.className) //

Λύση

Πρέπει να διαχωρίσουμε το className και τον βρόχο σε μέρη. Εάν η κλάση δεν βρεθεί, τότε προστίθεται.

Ο βρόχος είναι ελαφρώς βελτιστοποιημένος για απόδοση:

συνάρτηση addClass(elem, cls) ( for(var c = elem.className.split(" "), i=c.length-1; i>=0; i--) ( if (c[i] == cls ) return ) elem.className += " "+cls ) var obj = ( className: "open menu" ) addClass(obj, "new") addClass(obj, "open") alert(obj.className) // άνοιγμα μενού νέος

Στο παραπάνω παράδειγμα, η μεταβλητή c ορίζεται στην αρχή του βρόχου και ο τελευταίος δείκτης της ορίζεται σε i .

Ο ίδιος ο βρόχος επεξεργάζεται προς την αντίθετη κατεύθυνση, τελειώνοντας με τη συνθήκη i>=0 . Επειδή ο έλεγχος i>=0 είναι ταχύτερος από το i . Το οποίο στη JavaScript επιταχύνει τις αναζητήσεις συστοιχιών.

Χρήση μήκους για την περικοπή ενός πίνακα

Χρησιμοποιώντας την ιδιότητα μήκος, μπορείτε να περικόψετε έναν πίνακα ως εξής:

Ορίζετε το μήκος και το πρόγραμμα περιήγησης περικόπτει τον πίνακα.

Ο πίνακας είναι ένα αντικείμενο, το οποίο υπονοεί

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

Αυτό είναι διαφορετικό από την έννοια σε άλλες γλώσσες όπου οι πίνακες είναι ένα συνεχόμενο τμήμα της μνήμης. Αυτό είναι επίσης διαφορετικό από μια συνδεδεμένη λίστα που βασίζεται σε ουρά ή στοίβα.

Μη αριθμητικά πλήκτρα πίνακα

Τα κλειδιά είναι αριθμοί, αλλά μπορούν να έχουν οποιαδήποτε ονόματα:

arr = arr = 5 arr.prop = 10 // μην το κάνετε αυτό

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

Για παράδειγμα, το push/pop λειτουργεί μόνο στα πιο εξωτερικά στοιχεία μιας συστοιχίας, επομένως είναι απίστευτα γρήγορα.

Το push λειτουργεί μόνο με το τέλος:

var arr = ["My", "array"] arr.push("something") alert(arr) // string "array"

Οι μέθοδοι shift/unshift είναι αργές γιατί πρέπει να επαναριθμήσουν ολόκληρο τον πίνακα. Η μέθοδος συναρμογής μπορεί επίσης να προκαλέσει την αλλαγή της αρίθμησης:

Έτσι, το shift/unshift είναι πιο αργό από το push/pop. Όσο μεγαλύτερος είναι ο πίνακας, τόσο περισσότερος χρόνος χρειάζεται σε JavaScript για να ταξινομηθεί ο πίνακας.

Εργασία για αυτοεκπλήρωση

Ποιο θα είναι το αποτέλεσμα; Γιατί;

arr = ["a", "b"] arr.push(function() ( alert(this) )) arr() // ?

Λύση

Εφόσον οι πίνακες είναι αντικείμενα, arr ..είναι στην πραγματικότητα μια κλήση μεθόδου σε ένα αντικείμενο όπως το obj μέθοδος:

arr() // ίδιο με το arr() // συντακτικά λάθος, αλλά εννοιολογικά το ίδιο: arr.2() // ξαναγράφεται με το ίδιο στυλ με το obj.method() this = arr σε αυτήν την περίπτωση περνά στη συνάρτηση, έτσι εκτυπώνεται το περιεχόμενο του arr. arr = ["a", "b"] arr.push(function() ( alert(this) )) arr() // "a","b",function

Αραιοί πίνακες, περιγραφή μήκους

Η ιδιότητα length σάς επιτρέπει να λαμβάνετε όχι το μέγεθος ενός πίνακα σε JavaScript, αλλά το τελευταίο ευρετήριο + 1 . Αυτό είναι σημαντικό όταν πρόκειται για αραιούς πίνακες, με «κενά» στα ευρετήρια.

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

var fruits = // κενή σειρά φρούτα = "Peach" fruits = "Apple" alert(fruits.length) // 100 (αλλά υπάρχουν μόνο 2 στοιχεία στον πίνακα)

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

var fruits = // κενή σειρά φρούτων = "Peach" fruits = "Apple" alert(fruits) // ,Peach,Apple (ή κάτι τέτοιο)

Όμως ένας πίνακας είναι ένα αντικείμενο με δύο κλειδιά. Οι τιμές που λείπουν δεν καταλαμβάνουν χώρο.

Οι αραιοί πίνακες συμπεριφέρονται περίεργα όταν εφαρμόζονται μέθοδοι πίνακα σε αυτούς. Δεν έχουν ιδέα ότι λείπουν ευρετήρια:

var fruits = φρούτα = "Peach" fruits = "Apple" alert(fruits.pop()) // pop "Apple" (στο index 9) alert(fruits.pop()) // pop a unspecified element (στο ευρετήριο 8 )

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

Αφαίρεση από πίνακα

Καθώς γνωρίζουμε ότι οι πίνακες είναι αντικείμενα, επομένως θα μπορούσαμε να χρησιμοποιήσουμε το delete για να αφαιρέσουμε μια τιμή:

var arr = ["Go", "to", "home"] delete arr // now arr = ["Go", undefined, "home"] alert(arr) // not set

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

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

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

μέθοδος συναρμογής

Η μέθοδος splice μπορεί να αφαιρέσει στοιχεία και να τα αντικαταστήσει σε πολυδιάστατους πίνακες JavaScript. Η σύνταξή του είναι:

arr.splice(index, deleteCount[, elem1, ..., elemN])

Διαγράφει το στοιχείο deleteCount, ξεκινώντας από το index , και στη συνέχεια εισάγει τα elem1, ..., elemN στη θέση του.

Ας δούμε μερικά παραδείγματα:

var arr = ["Go", "to", "home"] arr.splice(1, 1) // αφαίρεση 1 στοιχείου ξεκινώντας από το ευρετήριο 1 alert(arr.join(",")) // ["Go " , "home"] (1 στοιχείο καταργήθηκε)

Έτσι, μπορείτε να χρησιμοποιήσετε το splice για να αφαιρέσετε ένα στοιχείο από έναν πίνακα. Οι αριθμοί των στοιχείων του πίνακα μετατοπίζονται για να καλυφθεί το κενό:

var arr = ["Go", "to", "home"] arr.splice(0, 1) // αφαίρεση 1 στοιχείου ξεκινώντας από το δείκτη 0 alert(arr) // "to" έγινε το πρώτο στοιχείο

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

Η μέθοδος splice επιστρέφει έναν πίνακα αφαιρεμένων στοιχείων:

var arr = ["Μετάβαση", "προς", "σπίτι", "τώρα"]; // αφαιρέστε τα πρώτα 2 στοιχεία var remove = arr.splice(0, 2) alert(removed) // "Go", "to"<-- массив удаленных элементов splice может вставлять элементы, задайте 0 для deleteCount. var arr = ["Go", "to", "home"]; // со второй позиции // удаляем 0 // и вставляем "my", "sweet" arr.splice(2, 0, "my", "sweet") alert(arr) // "Go", "to", "my", "sweet", "home"

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

var arr = // για το στοιχείο -1 (προτελευταίο) // αφαιρέστε 0 στοιχεία, // και εισάγετε 3 και 4 arr.splice(-1, 0, 3, 4) alert(arr) // 1,2,3, 4.5

Εργασία για αυτοεκπλήρωση

Το αντικείμενο περιέχει την ιδιότητα className, η οποία περιέχει τα ονόματα κλάσεων διαχωρισμένα με κενά:

var obj = ( className: "open menu" )

Γράψτε μια συνάρτηση removeClass(obj, cls) που αφαιρεί την κλάση cls αν της δοθεί:

removeClass(obj, "open") // obj.className="menu" removeClass(obj, "blabla") // αμετάβλητο (δεν υπάρχει κλάση για κατάργηση)

Λύση

Πρέπει να χωρίσετε το className σε μέρη και να επαναλάβετε αυτά τα μέρη μέσω ενός βρόχου. Εάν βρεθεί μια αντιστοίχιση, αφαιρείται από τη διάταξη αντικειμένων JavaScript και στη συνέχεια προστίθεται ξανά στο τέλος.

Ας το βελτιστοποιήσουμε λίγο:

συνάρτηση removeClass(elem, cls) ( for(var c = elem.className.split(" "), i=c.length-1; i>=0; i--) ( if (c[i] == cls ) c.splice(i,1) ) elem.className = c.join(" ") ) var obj = ( className: "open menu" ) removeClass(obj, "open") removeClass(obj, "blabla") ειδοποίηση (obj.className) // μενού

Στο παραπάνω παράδειγμα, η μεταβλητή c ορίζεται στην αρχή του βρόχου και το i ορίζεται στον τελευταίο της δείκτη.

Ο ίδιος ο βρόχος εκτελείται προς την αντίθετη κατεύθυνση, τελειώνοντας με τη συνθήκη i>=0 . Αυτό συμβαίνει επειδή το i>=0 ελέγχεται πιο γρήγορα από το i . Το οποίο επιταχύνει την αναζήτηση ιδιοτήτων σε c .

μέθοδος φέτας

Μπορείτε να εξαγάγετε μέρος ενός πίνακα χρησιμοποιώντας τη μέθοδο slice(begin[, end]): var arr = ["Why", "learn", "JavaScript"]; var arr2 = arr.slice(0,2) // παίρνει 2 στοιχεία ξεκινώντας από το 0 alert(arr2.join(", ")) // "Why, Learn"

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

Μπορείτε να παραλείψετε το δεύτερο όρισμα για να ξεκινήσετε όλα τα στοιχεία από ένα συγκεκριμένο ευρετήριο:

var arr = ["Γιατί", "μαθαίνω", "JavaScript"]; var arr2 = arr.slice(1) // δέχεται όλα τα στοιχεία που ξεκινούν από 1 ειδοποίηση(arr2.join(", ")) // "learn, JavaScript"

Η μέθοδος υποστηρίζει αρνητικούς δείκτες, όπως το String#slice .

αντίστροφη μέθοδος

Μια άλλη χρήσιμη μέθοδος είναι η αντίστροφη. Ας υποθέσουμε ότι θέλω να αποκτήσω το τελευταίο τμήμα του τομέα, όπως " com" από " my.site.com". Δείτε πώς να το κάνετε:

var domain = "my.site.com" var last = domain.split(".").reverse() alert(last)

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

Μπορείτε να δημιουργήσετε μεγαλύτερες κλήσεις όπως το reverse() 0] arr.sort() alert(arr) // 1, 15, 2

Εκτελέστε τον παραπάνω κώδικα. Θα λάβετε την παραγγελία 1 , 15 , 2 . Αυτό συμβαίνει επειδή η μέθοδος μετατρέπει τα πάντα σε συμβολοσειρά και χρησιμοποιεί τη λεξικογραφική σειρά από προεπιλογή.