Ταξινόμηση Array JavaScript ()

Η μέθοδος JavaScript Array sort () ταξινομεί τα στοιχεία ενός πίνακα.

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

Η σύνταξη της sort()μεθόδου είναι:

 arr.sort(compareFunction)

Εδώ, arr είναι ένας πίνακας.

ταξινόμηση () Παράμετροι

Η sort()μέθοδος περιλαμβάνει:

  • membandingkanFunction (προαιρετικό) - Χρησιμοποιείται για τον ορισμό μιας προσαρμοσμένης σειράς ταξινόμησης.

Επιστροφή τιμής από είδος ()

  • Επιστρέφει τον πίνακα αφού ταξινομήσει τα στοιχεία του πίνακα στη θέση του (που σημαίνει ότι αλλάζει τον αρχικό πίνακα και δεν έχει δημιουργηθεί αντίγραφο).

Παράδειγμα 1: Ταξινόμηση των στοιχείων μιας συστοιχίας

Όταν η σύγκρισηFunction δεν περνά,

  • Όλα τα μη undefinedσυστοιχικά στοιχεία μετατρέπονται πρώτα σε συμβολοσειρές.
  • Αυτές οι συμβολοσειρές συγκρίνονται στη συνέχεια χρησιμοποιώντας την τιμή σημείου κώδικα UTF-16.
  • Η ταξινόμηση γίνεται με αύξουσα σειρά.
  • Όλα τα undefinedστοιχεία ταξινομούνται στο τέλος του πίνακα.
 // sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); // returns the sorted array console.log(names.sort()); // modifies the array in place console.log(names); var priceList = (1000, 50, 2, 7, 14); priceList.sort(); // Number is converted to string and sorted console.log(priceList)

Παραγωγή

 ("Adam", "Ben", "Danil", "Fabiano", "Jeffrey") ("Adam", "Ben", "Danil", "Fabiano", "Jeffrey") (1000, 14, 2, 50 , 7)

Εδώ, μπορούμε να δούμε ότι ο πίνακας ονομάτων ταξινομείται με αύξουσα σειρά της συμβολοσειράς. Για παράδειγμα, ο Adam έρχεται πριν από τον Danil επειδή το "A" έρχεται πριν από το "D".

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

Εδώ, μπορούμε να δούμε ότι αν και το 1000 είναι μεγαλύτερο από 50 αριθμητικά, έρχεται στην αρχή της ταξινομημένης λίστας. Είναι επειδή το "1" <"5" .

Παράδειγμα 2: Ταξινόμηση χρησιμοποιώντας προσαρμοσμένη συνάρτηση

Όταν περάσει η σύγκρισηFunction,

  • Όλα τα μη undefinedσυστοιχικά στοιχεία ταξινομούνται σύμφωνα με την τιμή επιστροφής του membandingkanFunction.
  • Όλα τα απροσδιόριστα στοιχεία ταξινομούνται στο τέλος του πίνακα και δεν απαιτείται η σύγκριση.

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

 // custom sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); function len_compare(a, b)( return a.length - b.length; ) // sort according to string length names.sort(len_compare); console.log(names);

Παραγωγή

 ('Ben', 'Adam', 'Danil', 'Jeffrey', 'Fabiano')

Εδώ, η ταξινόμηση βασίζεται στη λογική a.length - b.length. Βασικά σημαίνει ότι το αντικείμενο με μικρότερο μήκος θα εμφανίζεται στην αρχή του Array.

Ας καταλάβουμε πρώτα πώς λειτουργεί το προαιρετικό compareFunction.

Οποιοσδήποτε compareFunctionέχει την ακόλουθη σύνταξη:

 function (a, b)( // sorting logic // return a Number )

Η sort()μέθοδος συγκρίνει όλες τις τιμές του πίνακα μεταβιβάζοντας δύο τιμές κάθε φορά στο compareFunction. Οι δύο παράμετροι a και b αντιπροσωπεύουν αυτές τις δύο τιμές αντίστοιχα.

Το compareFunctionπρέπει να επιστρέψει a Number. Αυτή η επιστρεφόμενη τιμή χρησιμοποιείται για την ταξινόμηση των στοιχείων με τον ακόλουθο τρόπο:

  • Εάν επιστραφεί η τιμή <0 , το a ταξινομείται πριν από το b (a έρχεται πριν από το b).
  • Εάν επιστραφεί η τιμή> 0 , το b ταξινομείται πριν από το a (b έρχεται πριν από το a).
  • Εάν επιστραφεί η τιμή == 0 , τα a και b παραμένουν αμετάβλητα το ένα στο άλλο.

Στο Παράδειγμα 2, ταξινομούμε τον πίνακα χρησιμοποιώντας:

 function len_compare(a, b)( return a.length - b.length; )

Εδώ:

  • Εάν a.length - b.length <0 , a έρχεται πριν από το b. Για παράδειγμα, το "Adam" έρχεται πριν από το "Jeffrey" ως 4 - 7 <0 .
  • Εάν a.length - b.length> 0 , b εμφανίζεται πριν από το a. Για παράδειγμα, το "Danil" ακολουθεί το "Ben" ως 5 - 3> 0.
  • Εάν a.length - b.length == 0 , η θέση τους είναι αμετάβλητη. Για παράδειγμα, η σχετική θέση των "Jeffrey" και "Fabiano" είναι αμετάβλητη επειδή 7 - 7 == 0 .

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

Παράδειγμα 3: Αριθμητική ταξινόμηση αριθμών

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

Ας δούμε πώς μπορούμε να το εφαρμόσουμε χρησιμοποιώντας μια προσαρμοσμένη συνάρτηση.

 // numeric sorting // define array var priceList = (1000, 50, 2, 7, 14); // sort() using function expression // ascending order priceList.sort(function (a, b) ( return a - b; )); // Output: Ascending - 2,7,14,50,1000 console.log("Ascending - " + priceList); // sort() using arrow function expression // descending order priceList.sort((a, b) => b - a); // Output: Descending - 1000,50,14,7,2 console.log("Descending - " + priceList);

Παραγωγή

 Αύξουσα - 2,7,14,50,1000 Φθίνουσα - 1000,50,14,7,2

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

 function (a, b) ( return a - b; )

Εδώ,

  • Εάν a - b <0 , a έρχεται πριν από το b. Για παράδειγμα, το 2 έρχεται πριν από το 7 ως 2 - 7 <0 .
  • Εάν a - b> 0 , b εμφανίζεται πριν από το a. Για παράδειγμα, το 1000 έρχεται μετά το 50 ως 1000 - 50> 0.

Μπορούμε να δούμε ότι αυτό έχει ως αποτέλεσμα την ταξινόμηση των αριθμών σύμφωνα με την αύξουσα αριθμητική τους τιμή.

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

Μπορούμε επίσης να αντιστρέψουμε (φθίνουσα σειρά) τον ταξινομημένο πίνακα χρησιμοποιώντας την ενσωματωμένη reverse()μέθοδο πίνακα . Για να μάθετε περισσότερα, επισκεφθείτε το JavaScript Array αντίστροφη ().

ενδιαφέροντα άρθρα...