22. Ταξινόμηση πινάκων (array sort) JavaScript

JS sorting array


Ταξινόμηση πίνακα

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

Παράδειγμα

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();        // Sorts the elements of fruits

Δοκιμάστε τον εαυτό σας »


Αντιστροφή ενός πίνακα

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

Μπορείτε να τη χρησιμοποιήσετε για να ταξινομήσετε έναν πίνακα σε φθίνουσα σειρά:

Παράδειγμα

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();        // First sort the elements of fruits
fruits.reverse();     // Then reverse the order of the elements

Δοκιμάστε τον εαυτό σας »


Αριθμητική Ταξινόμηση

Από προεπιλογή, η συνάρτηση sort() ταξινομεί τις τιμές ως συμβολοσειρές .

Αυτό λειτουργεί καλά για συμβολοσειρές (το “Apple” έρχεται πριν από το “Banana”).

Ωστόσο, εάν οι αριθμοί ταξινομούνται ως συμβολοσειρές, το “25” είναι μεγαλύτερο από “100”, επειδή το “2” είναι μεγαλύτερο από το “1”.

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

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

Παράδειγμα

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});

Δοκιμάστε τον εαυτό σας »

Χρησιμοποιήστε το ίδιο τέχνασμα για να ταξινομήσετε με φθίνουσα σειρά έναν πίνακα:

Παράδειγμα

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});

Δοκιμάστε τον εαυτό σας »


Η συνάρτηση σύγκρισης

Ο σκοπός της συνάρτησης σύγκρισης είναι να ορίσει μια εναλλακτική σειρά ταξινόμησης.

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

function(a, b){return a - b}

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

Αν το αποτέλεσμα είναι αρνητικό aταξινομείται πριν b.

Αν το αποτέλεσμα είναι θετικό b, ταξινομείται πριν a.

Αν το αποτέλεσμα είναι 0 δεν γίνονται αλλαγές με τη σειρά ταξινόμησης των δύο τιμών.

Παράδειγμα:

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

Όταν συγκρίνουμε 40 και 100, η μέθοδος sort() καλεί τη συνάρτηση σύγκρισης (40, 100).

Η συνάρτηση υπολογίζει 40 – 100 (a - b), και αφού το αποτέλεσμα είναι αρνητικό (-60), η συνάρτηση ταξινόμησης θα ταξινομήσει 40 ως τιμή μικρότερη από 100.

Μπορείτε να χρησιμοποιήσετε αυτό το απόσπασμα κώδικα για να πειραματιστείτε με ταξινόμηση με αριθμητικά και αλφαβητικά:

<button onclick="myFunction1()">Sort Alphabetically</button>
<button onclick="myFunction2()">Sort Numerically</button>

<p id="demo"></p>

<script>
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;

function myFunction1() {
  points.sort();
  document.getElementById("demo").innerHTML = points;
}

function myFunction2() {
  points.sort(function(a, b){return a - b});
  document.getElementById("demo").innerHTML = points;
}
</script>

Δοκιμάστε τον εαυτό σας »


Ταξινόμηση πίνακα σε τυχαία σειρά

Παράδειγμα

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()});

Δοκιμάστε τον εαυτό σας »


Βρείτε την υψηλότερη (ή χαμηλότερη) τιμή πίνακα

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

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

Ταξινόμηση κατά αύξουσα σειρά:

Παράδειγμα

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// now points[0] contains the lowest value
// and points[points.length-1] contains the highest value

Δοκιμάστε τον εαυτό σας »

Ταξινόμηση φθίνουσα:

Παράδειγμα

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// now points[0] contains the highest value
// and points[points.length-1] contains the lowest value

Δοκιμάστε τον εαυτό σας »

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


Χρήση του Math.max() σε έναν πίνακα

Μπορείτε να χρησιμοποιήσετε το Math.max.apply για να βρείτε τον μεγαλύτερο αριθμό σε έναν πίνακα:

Παράδειγμα

function myArrayMax(arr) {
  return Math.max.apply(null, arr);
}

Δοκιμάστε τον εαυτό σας »

Math.max.apply(null, [1, 2, 3])είναι ισοδύναμο με Math.max(1, 2, 3).


Χρήση του Math.min() σε έναν πίνακα

Μπορείτε να χρησιμοποιήσετε το Math.min.applyγια να βρείτε τον μικρότερο αριθμό σε έναν πίνακα:

Παράδειγμα

function myArrayMin(arr) {
  return Math.min.apply(null, arr);
}

Δοκιμάστε τον εαυτό σας »

Math.min.apply(null, [1, 2, 3])είναι ισοδύναμο με Math.min(1, 2, 3).


Οι μέθοδοι ελάχιστου / μέγιστου (Min / Max) στην JavaScript

Η ταχύτερη λύση είναι η χρήση μιας “home made” μεθόδου.

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

Παράδειγμα (Εύρεση μέγιστου)

function myArrayMax(arr) {
  var len = arr.length;
  var max = -Infinity;
  while (len--) {
    if (arr[len] > max) {
      max = arr[len];
    }
  }
  return max;
}

Δοκιμάστε τον εαυτό σας »

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

Παράδειγμα (Εύρεση Min)

function myArrayMin(arr) {
  var len = arr.length;
  var min = Infinity;
  while (len--) {
    if (arr[len] < min) {
      min = arr[len];
    }
  }
  return min;
}

Δοκιμάστε τον εαυτό σας »


Ταξινόμηση συστοιχιών αντικειμένων

Οι πίνακες JavaScript περιέχουν συχνά αντικείμενα:

Παράδειγμα

var cars = [
  {type:"Volvo", year:2016},
  {type:"Saab", year:2001},
  {type:"BMW", year:2010}
];

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

Η λύση είναι να γράψετε μια συνάρτηση σύγκρισης για να συγκρίνετε τις τιμές ιδιοτήτων:

Παράδειγμα

cars.sort(function(a, b){return a.year - b.year});

Δοκιμάστε τον εαυτό σας »

Η σύγκριση ιδιοτήτων συμβολοσειρών είναι λίγο πιο περίπλοκη:

Παράδειγμα

cars.sort(function(a, b){
  var x = a.type.toLowerCase();
  var y = b.type.toLowerCase();
  if (x < y) {return -1;}
  if (x > y) {return 1;}
  return 0;
});

Δοκιμάστε τον εαυτό σας »


Δοκιμάστε τον εαυτό σας με τις ασκήσεις

Ασκηση:

Χρησιμοποιήστε τη σωστή μέθοδο Array για να ταξινομήσετε τη fruitsσυστοιχία αλφαβητικά.

var φρούτα = ["Μπανάνα", "Πορτοκάλι", "Apple", "Kiwi"]?
.

Υποβολή απάντησης “

Ξεκινήστε την Άσκηση


Days
Hours
Minutes

22. Ταξινόμηση πινάκων (array sort) JavaScript

Κοινοποίηση

Share on facebook
Share on twitter

Ακολουθήστε μας

Αρέσει σε %d bloggers: