Η ταξινόμηση πινάκων στη JavaScript γίνεται με τη χρήση της μεθόδου sort()
. Η sort()
ταξινομεί τα στοιχεία ενός πίνακα και επιστρέφει τον ταξινομημένο πίνακα.
Η προεπιλεγμένη μέθοδος ταξινόμησης της sort()
μετατρέπει τα στοιχεία του πίνακα σε συμβολοσειρές και τα ταξινομεί με βάση την αναγνωριστική (lexicographic) σειρά. Αυτή η μέθοδος ταξινόμησης μπορεί να είναι αποδοτική για συμβολοσειρές, αλλά μπορεί να προκαλέσει ανεπιθύμητα αποτελέσματα για αριθμούς.
Για ταξινόμηση αριθμών σωστά, μπορείτε να παρέχετε μια συνάρτηση σύγκρισης (comparison function) ως όρισμα στη μέθοδο sort()
. Η συνάρτηση σύγκρισης δέχεται δύο παραμέτρους (a, b) που είναι τα στοιχεία που πρέπει να συγκριθούν. Επιστρέφει μια αρνητική τιμή εάν το a πρέπει να τεθεί πριν το b, μια θετική τιμή εάν το a πρέπει να τεθεί μετά το b και μηδέν εάν τα a και b είναι ισοδύναμα.
Εδώ υπάρχει ένα παράδειγμα που δείχνει πώς να ταξινομήσετε έναν πίνακα αριθμών:
var numbers = [5, 2, 8, 1, 9, 4]; numbers.sort(function(a, b) { return a - b; }); console.log(numbers); // Εμφανίζει: [1, 2, 4, 5, 8, 9]
Σε αυτό το παράδειγμα, ο πίνακας numbers
περιέχει διάφορους αριθμούς. Η συνάρτηση σύγκρισης function(a, b) { return a - b; }
λαμβάνει δύο παραμέτρους a
και b
και ταξινομεί τα στοιχεία σε αύξουσα σειρά αφαιρώντας το b από το a. Αυτή η συνάρτηση εξασφαλίζει ότι ο πίνακας ταξινομείται σε αύξουσα αριθμητική σειρά.
Μπορείτε να ταξινομήσετε πίνακες από αλφαβητικά στοιχεία με την ίδια μέθοδο, χωρίς να παρέχετε μια συνάρτηση σύγκρισης. Η sort()
θα χρησιμοποιήσει την προεπιλεγμένη σειρά αναγνωριστικής ταξινόμησης για τα αλφαβητικά στοιχεία.
Προσέξτε ότι η sort()
τροποποιεί τον αρχικό πίνακα και επιστρέφει τον ταξινομημένο πίνακα. Εάν θέλετε να διατηρήσετε τον αρχικό πίνακα αμετάβλητο, μπορείτε να δημιουργήσετε ένα αντίγραφο του πίνακα πριν εφαρμόσετε τη μέθοδο sort()
.
Η μέθοδος sort() ταξινομεί έναν πίνακα σε αλφαβητική σειρά. Ωστόσο, είναι σημαντικό να γνωρίζετε ότι η αλφαβητική ταξινόμηση γίνεται με βάση τον κωδικό Unicode κάθε χαρακτήρα.
Εδώ υπάρχει ένα παράδειγμα που δείχνει πώς να χρησιμοποιήσετε τη μέθοδο sort() για να ταξινομήσετε έναν πίνακα με αλφαβητικά στοιχεία:
var fruits = ['Banana', 'Apple', 'Orange', 'Mango']; fruits.sort(); console.log(fruits); // Εμφανίζει: ["Apple", "Banana", "Mango", "Orange"]
Σε αυτό το παράδειγμα, ο πίνακας fruits
περιέχει διάφορα φρούτα. Η μέθοδος sort()
καλείται στον πίνακα fruits
και ταξινομεί τα φρούτα σε αλφαβητική σειρά. Ως αποτέλεσμα, ο πίνακας ταξινομείται ως εξής: ["Apple", "Banana", "Mango", "Orange"]
.
Επίσης, μπορείτε να χρησιμοποιήσετε τη μέθοδο sort()
για να ταξινομήσετε έναν πίνακα αριθμών, αλλά θα πρέπει να προσέξετε καθώς γίνεται αλφαβητική ταξινόμηση. Για τη σωστή ταξινόμηση αριθμών, μπορείτε να χρησιμοποιήσετε μια συνάρτηση σύγκρισης (comparison function) ως παράμετρο στη μέθοδο sort().
Η μέθοδος reverse()
αντιστρέφει τα στοιχεία ενός πίνακα. Μπορείτε να τη χρησιμοποιήσετε για να αντιστρέψετε έναν πίνακα και να τον ταξινομήσετε σε φθίνουσα σειρά.
Εδώ υπάρχει ένα παράδειγμα που δείχνει πώς να χρησιμοποιήσετε τη μέθοδο reverse()
για να αντιστρέψετε έναν πίνακα:
var numbers = [5, 2, 8, 1, 9, 4]; numbers.reverse(); console.log(numbers); // Εμφανίζει: [4, 9, 1, 8, 2, 5]
Σε αυτό το παράδειγμα, ο πίνακας numbers
περιέχει διάφορους αριθμούς. Η μέθοδος reverse()
καλείται στον πίνακα numbers
και αντιστρέφει τα στοιχεία του πίνακα. Ως αποτέλεσμα, ο πίνακας γίνεται [4, 9, 1, 8, 2, 5]
.
Προσέξτε ότι η μέθοδος reverse()
τροποποιεί τον αρχικό πίνακα και επιστρέφει τον αντιστραμμένο πίνακα. Αν θέλετε να διατηρήσετε τον αρχικό πίνακα αμετάβλητο, μπορείτε να δημιουργήσετε ένα αντίγραφο του πίνακα πριν εφαρμόσετε τη μέθοδο reverse()
.
Η προεπιλεγμένη συμπεριφορά της μεθόδου sort()
είναι να ταξινομεί τις τιμές ως συμβολοσειρές, και όχι ως αριθμούς. Αυτό μπορεί να προκαλέσει λανθασμένα αποτελέσματα κατά την ταξινόμηση αριθμητικών τιμών.
Για να διορθώσετε αυτό το πρόβλημα, μπορείτε να παρέχετε μια συνάρτηση σύγκρισης (comparison function) ως όρισμα στη μέθοδο sort()
. Η συνάρτηση αυτή λαμβάνει δύο παραμέτρους (a, b) που είναι τα στοιχεία που πρέπει να συγκριθούν. Επιστρέφει μια αρνητική τιμή εάν το a
πρέπει να τεθεί πριν το b
, μια θετική τιμή εάν το a
πρέπει να τεθεί μετά το b
, και μηδέν εάν τα a
και b
είναι ισοδύναμα.
Εδώ υπάρχει ένα παράδειγμα που χρησιμοποιεί μια συνάρτηση σύγκρισης για να ταξινομήσει έναν πίνακα αριθμών:
var numbers = [25, 100, 1, 8, 2, 5]; numbers.sort(function(a, b) { return a - b; }); console.log(numbers); // Εμφανίζει: [1, 2, 5, 8, 25, 100]
Σε αυτό το παράδειγμα, η συνάρτηση σύγκρισης function(a, b) { return a - b; }
χρησιμοποιείται για να συγκρίνει τους αριθμούς a
και b
. Επιστρέφει μια αρνητική τιμή εάν το a
είναι μικρότερο από το b
, μια θετική τιμή εάν το a
είναι μεγαλύτερο από το b
, και μηδέν εάν τα a
και b
είναι ισοδύναμα. Αυτή η συνάρτηση σύγκρισης εξασφαλίζει ότι ο πίνακας ταξινομείται σε αύξουσα αριθμητική σειρά.
Χρησιμοποιώντας μια συνάρτηση σύγκρισης στην sort()
, μπορείτε να εξασφαλίσετε τη σωστή ταξινόμηση αριθμητικών τιμών.
Για να ταξινομήσετε έναν πίνακα φθίνουσα σειρά, μπορείτε να τροποποιήσετε τη συνάρτηση σύγκρισης που παρέχετε στη μέθοδο sort()
. Αντί να επιστρέφετε τη διαφορά a - b
, επιστρέψτε τη διαφορά b - a
. Αυτό θα οδηγήσει σε ταξινόμηση φθίνουσα αριθμητικής σειράς.
Εδώ υπάρχει ένα παράδειγμα:
var numbers = [25, 100, 1, 8, 2, 5]; numbers.sort(function(a, b) { return b - a; }); console.log(numbers); // Εμφανίζει: [100, 25, 8, 5, 2, 1]
Σε αυτό το παράδειγμα, η συνάρτηση σύγκρισης function(a, b) { return b - a; }
τροποποιείται για να επιστρέφει τη διαφορά b - a
. Αυτό οδηγεί σε ταξινόμηση φθίνουσα αριθμητικής σειράς. Ως αποτέλεσμα, ο πίνακας ταξινομείται ως εξής: [100, 25, 8, 5, 2, 1]
.
Με τη χρήση αυτής της τεχνικής, μπορείτε να ταξινομήσετε έναν πίνακα φθίνουσα σειρά αριθμητικών τιμών.
Η συνάρτηση σύγκρισης (compare function) χρησιμοποιείται για να ορίσει μια εναλλακτική σειρά ταξινόμησης για τα στοιχεία ενός πίνακα.
Η συνάρτηση σύγκρισης πρέπει να επιστρέφει μια αρνητική, μηδενική ή θετική τιμή ανάλογα με τα ορίσματά της. Αυτή η τιμή καθορίζει τη σειρά ταξινόμησης των στοιχείων.
- Εάν η τιμή επιστροφής είναι αρνητική, τότε το πρώτο όρισμα θα τεθεί πριν το δεύτερο όρισμα στην τελική ταξινόμηση.
- Εάν η τιμή επιστροφής είναι μηδέν, τότε τα δύο ορίσματα θεωρούνται ισοδύναμα και η σειρά τους δεν αλλάζει.
- Εάν η τιμή επιστροφής είναι θετική, τότε το πρώτο όρισμα θα τεθεί μετά το δεύτερο όρισμα στην τελική ταξινόμηση.
Ορίζοντας μια προσαρμοσμένη συνάρτηση σύγκρισης, μπορείτε να επιτύχετε προηγμένες μορφές ταξινόμησης, όπως ταξινόμηση με πολλαπλά κριτήρια ή ταξινόμηση αντικειμένων με βάση κάποιο ιδιότητα.
Παρακάτω παραδείγματα που χρησιμοποιούν συναρτήσεις σύγκρισης:
Παράδειγμα 1: Ταξινόμηση αριθμών σε αύξουσα σειρά
var numbers = [5, 2, 8, 1, 9, 4]; numbers.sort(function(a, b) { return a - b; }); console.log(numbers); // Εμφανίζει: [1, 2, 4, 5, 8, 9]
Παράδειγμα 2: Ταξινόμηση αντικειμένων βάσει ιδιότητας
var cars = [ { brand: 'Ford', year: 2020 }, { brand: 'BMW', year: 2018 }, { brand: 'Toyota', year: 2019 } ]; cars.sort(function(a, b) { return a.year - b.year; }); console.log(cars); // Εμφανίζει: // [{ brand: 'BMW', year: 2018 }, // { brand: 'Toyota', year: 2019 }, // { brand: 'Ford', year: 2020 }]
Σε αυτά τα παραδείγματα, οι προσαρμοσμένες συναρτήσεις σύγκρισης επιστρέφουν τη διαφορά ανάμεσα στα δύο στοιχεία (a - b
). Αυτό οδηγεί σε ταξινόμηση αριθμητικής σειράς για το πρώτο παράδειγμα και ταξινόμηση των αυτοκινήτων βάσει του έτους για το δεύτερο παράδειγμα.
Χρησιμοποιώντας μια προσαρμοσμένη συνάρτηση σύγκρισης, μπορείτε να ορίσετε τη σειρά ταξινόμησης που σας εξυπηρετεί για τα δεδομένα σας.
Παράδειγμα:
Η συνάρτηση σύγκρισης συγκρίνει όλες τις τιμές του πίνακα, δύο τιμές τη φορά (a, b).
Όταν συγκρίνονται οι αριθμοί 40 και 100, η μέθοδος sort()
καλεί τη συνάρτηση σύγκρισης (40, 100).
Η συνάρτηση υπολογίζει τη διαφορά 40 – 100 (a – b) και επειδή το αποτέλεσμα είναι αρνητικό (-60), η μέθοδος sort()
θα ταξινομήσει το 40 ως μια τιμή μικρότερη από το 100.
Μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα για να πειραματιστείτε με ταξινόμηση αριθμητικών και αλφαβητικών τιμών:
var numbers = [40, 100, 1, 5, 25]; numbers.sort(function(a, b) { return a - b; }); console.log(numbers); // Ταξινομημένος πίνακας: [1, 5, 25, 40, 100] var fruits = ['Apple', 'Banana', 'Orange', 'Mango']; fruits.sort(); console.log(fruits); // Ταξινομημένος πίνακας: ["Apple", "Banana", "Mango", "Orange"]
Σε αυτό το παράδειγμα, ο πίνακας numbers
περιέχει αριθμούς και η συνάρτηση σύγκρισης function(a, b) { return a - b; }
χρησιμοποιείται για να ταξινομήσει τους αριθμούς σε αύξουσα σειρά. Ο πίνακας fruits
περιέχει φρούτα και η sort()
καλείται χωρίς συνάρτηση σύγκρισης, οπότε οι τιμές ταξινομούνται αλφαβητικά.
Μπορείτε να πειραματιστείτε με αυτόν τον κώδικα και να δείτε πώς λειτουργεί η συνάρτηση σύγκρισης σε διάφορα παραδείγματα ταξινόμησης.
Για να ταξινομήσετε έναν πίνακα σε τυχαία σειρά, μπορείτε να χρησιμοποιήσετε τη μέθοδο sort()
σε συνδυασμό με μια συνάρτηση σύγκρισης που επιστρέφει μια τυχαία τιμή.
Εδώ υπάρχει ένα παράδειγμα που χρησιμοποιεί τη μέθοδο sort()
με μια συνάρτηση σύγκρισης που επιστρέφει μια τυχαία τιμή:
var array = [1, 2, 3, 4, 5]; array.sort(function(a, b) { return 0.5 - Math.random(); }); console.log(array); // Τυχαία ταξινομημένος πίνακας
Σε αυτό το παράδειγμα, η συνάρτηση σύγκρισης επιστρέφει μια τυχαία τιμή ανάμεσα σε -0.5 και 0.5, χρησιμοποιώντας την Math.random()
. Αυτό έχει ως αποτέλεσμα να γίνεται τυχαία αναδιάταξη των στοιχείων του πίνακα.
Με τον τρόπο αυτό, μπορείτε να ταξινομήσετε έναν πίνακα σε τυχαία σειρά κάθε φορά που εκτελείται ο κώδικας.
Για να βρείτε τη μεγαλύτερη (ή μικρότερη) τιμή σε έναν πίνακα, μπορείτε να χρησιμοποιήσετε τη μέθοδο sort()
για να ταξινομήσετε τον πίνακα σε αύξουσα ή φθίνουσα σειρά, και στη συνέχεια να προσπελάσετε την πρώτη ή την τελευταία θέση του πίνακα αντίστοιχα.
Εδώ υπάρχουν δύο παραδείγματα:
Παράδειγμα 1: Βρείτε τη μεγαλύτερη τιμή σε αύξουσα σειρά
var numbers = [5, 2, 8, 1, 9, 4]; numbers.sort(function(a, b) { return a - b; }); var max = numbers[numbers.length - 1]; console.log(max); // Εμφανίζει: 9
Σε αυτό το παράδειγμα, ο πίνακας numbers
ταξινομείται σε αύξουσα σειρά χρησιμοποιώντας τη συνάρτηση σύγκρισης function(a, b) { return a - b; }
. Η μεγαλύτερη τιμή βρίσκεται στην τελευταία θέση του πίνακα, οπότε αποθηκεύεται στη μεταβλητή max
.
Παράδειγμα 2: Βρείτε τη μικρότερη τιμή σε φθίνουσα σειρά
var numbers = [5, 2, 8, 1, 9, 4]; numbers.sort(function(a, b) { return b - a; }); var min = numbers[numbers.length - 1]; console.log(min); // Εμφανίζει: 1
Σε αυτό το παράδειγμα, ο πίνακας numbers
ταξινομείται σε φθίνουσα σειρά χρησιμοποιώντας τη συνάρτηση σύγκρισης function(a, b) { return b - a; }
. Η μικρότερη τιμή βρίσκεται στην τελευταία θέση του πίνακα και αποθηκεύεται στη μεταβλητή min
.
Με αυτόν τον τρόπο, μπορείτε να βρείτε τη μεγαλύτερη ή τη μικρότερη τιμή σε έναν πίνακα μετά την ταξινόμησή του.
Για να βρείτε τη μεγαλύτερη τιμή σε έναν πίνακα, μπορείτε να χρησιμοποιήσετε την Math.max()
σε συνδυασμό με το spread operator (...
) για να περάσετε τα στοιχεία του πίνακα ως ορίσματα.
Εδώ υπάρχει ένα παράδειγμα:
var numbers = [5, 2, 8, 1, 9, 4]; var max = Math.max(...numbers); console.log(max); // Εμφανίζει: 9
Σε αυτό το παράδειγμα, χρησιμοποιούμε την Math.max()
για να βρούμε τη μεγαλύτερη τιμή στον πίνακα numbers
. Χρησιμοποιούμε το spread operator (...numbers
) για να περάσουμε κάθε στοιχείο του πίνακα ως ξεχωριστά ορίσματα στην Math.max()
. Η Math.max()
επιστρέφει τη μεγαλύτερη τιμή από τα ορίσματα που δίνονται, και αποθηκεύουμε το αποτέλεσμα στη μεταβλητή max
.
Με αυτόν τον τρόπο, μπορείτε να βρείτε τη μεγαλύτερη τιμή σε έναν πίνακα χρησιμοποιώντας την Math.max()
.
Για να βρείτε τη μικρότερη τιμή σε έναν πίνακα, μπορείτε να χρησιμοποιήσετε την Math.min()
σε συνδυασμό με το spread operator (...
) για να περάσετε τα στοιχεία του πίνακα ως ορίσματα.
Εδώ υπάρχει ένα παράδειγμα:
var numbers = [5, 2, 8, 1, 9, 4]; var min = Math.min(...numbers); console.log(min); // Εμφανίζει: 1
Σε αυτό το παράδειγμα, χρησιμοποιούμε την Math.min()
για να βρούμε τη μικρότερη τιμή στον πίνακα numbers
. Χρησιμοποιούμε το spread operator (...numbers
) για να περάσουμε κάθε στοιχείο του πίνακα ως ξεχωριστά ορίσματα στην Math.min()
. Η Math.min()
επιστρέφει τη μικρότερη τιμή από τα ορίσματα που δίνονται, και αποθηκεύουμε το αποτέλεσμα στη μεταβλητή min
.
Με αυτόν τον τρόπο, μπορείτε να βρείτε τη μικρότερη τιμή σε έναν πίνακα χρησιμοποιώντας την Math.min()
.
Αν χρειάζεστε μια πιο γρήγορη λύση για την εύρεση της μικρότερης και μεγαλύτερης τιμής σε έναν πίνακα, μπορείτε να χρησιμοποιήσετε μια “σπιτική” μέθοδο.
Αυτή η συνάρτηση διατρέχει έναν πίνακα συγκρίνοντας κάθε τιμή με την υψηλότερη τιμή που έχει βρεθεί:
function findMin(array) { var min = array[0]; for (var i = 1; i < array.length; i++) { if (array[i] < min) { min = array[i]; } } return min; } function findMax(array) { var max = array[0]; for (var i = 1; i < array.length; i++) { if (array[i] > max) { max = array[i]; } } return max; } var numbers = [5, 2, 8, 1, 9, 4]; var min = findMin(numbers); var max = findMax(numbers); console.log(min); // Εμφανίζει: 1 console.log(max); // Εμφανίζει: 9
Σε αυτό το παράδειγμα, οι συναρτήσεις findMin()
και findMax()
διατρέχουν τον πίνακα και συγκρίνουν κάθε τιμή με τη μικρότερη ή μεγαλύτερη τιμή που έχει βρεθεί αντίστοιχα. Οι μικρότερες και μεγαλύτερες τιμές αποθηκεύονται στις μεταβλητές min
και max
. Τέλος, εμφανίζονται οι μικρότερη και μεγαλύτερη τιμή με τη χρήση της console.log()
.
Με αυτήν την προσαρμοσμένη λύση, μπορείτε να βρείτε τη μικρότερη και μεγαλύτερη τιμή σε έναν πίνακα χρησιμοποιώντας έναν βρόχο και τη σύγκριση των τιμών.
Οι πίνακες της JavaScript συχνά περιέχουν αντικείμενα. Για να ταξινομήσετε έναν πίνακα αντικειμένων βάσει ενός κριτηρίου, μπορείτε να χρησιμοποιήσετε τη μέθοδο sort()
και μια συνάρτηση σύγκρισης.
Εδώ υπάρχει ένα παράδειγμα:
var students = [ { name: "John", age: 20 }, { name: "Anna", age: 18 }, { name: "Peter", age: 22 } ]; students.sort(function(a, b) { return a.age - b.age; }); console.log(students);
Σε αυτό το παράδειγμα, ο πίνακας students
περιέχει αντικείμενα με ιδιότητες name
και age
. Χρησιμοποιούμε την sort()
για να ταξινομήσουμε τα αντικείμενα βάσει της ηλικίας (age
). Η συνάρτηση σύγκρισης function(a, b) { return a.age - b.age; }
συγκρίνει τις ηλικίες και επιστρέφει έναν αριθμητικό αντίστοιχα. Με αυτόν τον τρόπο, ο πίνακας students
ταξινομείται με αύξουσα σειρά βάσει της ηλικίας.
Αν θέλετε να ταξινομήσετε τον πίνακα αντικειμένων με φθίνουσα σειρά, μπορείτε να αντιστρέψετε τη σύγκριση:
students.sort(function(a, b) { return b.age - a.age; }); console.log(students);
Με αυτόν τον τρόπο, ο πίνακας students
ταξινομείται με φθίνουσα σειρά βάσει της ηλικίας.
Μπορείτε να προσαρμόσετε τη συνάρτηση σύγκρισης ανάλογα με την ιδιότητα του αντικειμένου που θέλετε να χρησιμοποιήσετε για την ταξινόμηση.
Όταν θέλετε να ταξινομήσετε έναν πίνακα αντικειμένων βάσει μιας συμβολοσειράς ιδιοκτησίας, η σύγκριση είναι λίγο πιο περίπλοκη, καθώς πρέπει να λάβετε υπόψη τη συμβολοσειρά ταξινόμησης και την ευαισθησία στην πεζή/κεφαλαία γραφή.
Για παράδειγμα, αν έχουμε έναν πίνακα αντικειμένων με ιδιότητα name
και θέλουμε να ταξινομήσουμε τα αντικείμενα σε αύξουσα σειρά βάσει του name
, μπορούμε να χρησιμοποιήσουμε την localeCompare()
μέθοδο για να πραγματοποιήσουμε τη σύγκριση.
Εδώ υπάρχει ένα παράδειγμα:
var students = [ { name: "Γιάννης", age: 20 }, { name: "Άννα", age: 18 }, { name: "Πέτρος", age: 22 } ]; students.sort(function(a, b) { return a.name.localeCompare(b.name); }); console.log(students);
Σε αυτό το παράδειγμα, ο πίνακας students
ταξινομείται σε αύξουσα σειρά βάσει της ιδιότητας name
. Η συνάρτηση σύγκρισης function(a, b) { return a.name.localeCompare(b.name); }
χρησιμοποιεί τη μέθοδο localeCompare()
για να συγκρίνει τις συμβολοσειρές name
των αντικειμένων. Η localeCompare()
επιστρέφει έναν αριθμό που αντιπροσωπεύει τη σχέση μεταξύ των συμβολοσειρών (αρνητικός, μηδέν, θετικός), και με αυτόν τον τρόπο η sort()
μπορεί να πραγματοποιήσει τη σωστή ταξινόμηση.
Μπορείτε να προσαρμόσετε τη συνάρτηση σύγκρισης και τη μέθοδο localeCompare()
ανάλογα με τις ανάγκες σας, όπως την ευαισθησία στην πεζή/κεφαλαία γραφή ή τον τρόπο ταξινόμησης.