Sortowanie tablic JavaScript

sort() Metoda jest jednym z najpotężniejszych metod tablicy.

Sortowanie tablicy

sort() Metoda sortuje tablicę w porządku alfabetycznym:

Przykład

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Sortuj elementy w fruits

Spróbuj sam

odwróć tablicę

reverse() metoda odwraca elementy w tablicy.

Możesz użyć tego do sortowania tablicy w porządku malejącym:

Przykład

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Sortuj elementy w fruits
fruits.reverse();         // Odwróć kolejność elementów

Spróbuj sam

sortowanie liczb

Domyślnie:sort() Funkcja sortuje się:ciężarówsortuje wartości w określonej kolejności.

Funkcja ta jest bardzo odpowiednia dla ciągów znaków ("Apple" jest przed "Banana").

Jednak, jeśli liczby są sortowane jako ciąg znaków, "25" jest większe niż "100", ponieważ "2" jest większe niż "1".

Dlatego:sort() Metoda może generować niewłaściwe wyniki podczas sortowania liczb.

PoprzezFunkcja porównawczaAby naprawić ten problem:

Przykład

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

Spróbuj sam

Użyj tej samej techniki do sortowania tablicy w porządku malejącym:

Przykład

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

Spróbuj sam

Funkcja porównawcza

Cel funkcji porównawczej to zdefiniowanie innej kolejności sortowania.

Funkcja porównawcza powinna zwracać ujemną, zero lub dodatnią wartość, w zależności od parametrów:

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

Kiedy: sort() Funkcja porównuje dwie wartości, wysyła je do funkcji porównawczej i sortuje je na podstawie zwróconej wartości (ujemnej, zero lub dodatniej).

Przykład:

Kiedy porównujemy 40 i 100:sort() Metoda wywołuje funkcję porównawczą function(40,100).

Funkcja oblicza 40-100 i zwraca -60 (ujemna wartość).

Funkcja sortowania umieści 40 jako wartość niższą niż 100.

Możesz użyć poniższego kodu do testowania sortowania liczbowego i alfabetycznego:

<button onclick="myFunction1()">Sortuj według liter</button>
<button onclick="myFunction2()">Sortuj według liczby</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>

Spróbuj sam

sortowanie tablicy w sposób losowy

Przykład

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

Spróbuj sam

Znajdowanie największej (lub najmniejszej) wartości tablicy

JavaScript nie dostarcza wbudowanej funkcji do wyszukiwania największej lub najmniejszej wartości w tablicy.

Po posortowaniu tablicy, możesz użyć indeksów, aby uzyskać najwyższą lub najniższą wartość.

sortowanie rosnące:

Przykład

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// teraz points[0] zawiera najniższą wartość
// a points[points.length-1] zawiera najwyższą wartość

Spróbuj sam

sortowanie malejące:

Przykład

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// teraz points[0] zawiera najwyższą wartość
// a points[points.length-1] zawiera najniższą wartość

Spróbuj sam

Jeśli potrzebujesz tylko znaleźć najwyższą lub najniższą wartość, sortowanie całej tablicy jest bardzo efektywnym sposobem.

do użycia Math.max() na tablicy

Możesz użyć Math.max.apply aby znaleźć najwyższą wartość w tablicy:

Przykład

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

Spróbuj sam

Math.max.apply([1, 2, 3]) równa się Math.max(1, 2, 3).

do użycia Math.min() na tablicy

Możesz użyć Math.min.apply aby znaleźć najniższą wartość w tablicy:

Przykład

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

Spróbuj sam

Math.min.apply([1, 2, 3]) równa się Math.min(1, 2, 3).

Moje metody Min / Max w JavaScript

Najbardziej efektywnym rozwiązaniem jest użycie "własnego" metody.

Ta funkcja przechodzi przez tablicę, porównując znaleziony najwyższy wartość z każdą wartością:

Przykład (wyszukiwanie Max)

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

Spróbuj sam

Ta funkcja przechodzi przez tablicę, porównując znaleziony najniższy wartość z każdą wartością:

Przykład (wyszukiwanie Min)

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

Spróbuj sam

Sortowanie tablic obiektów

Tablice JavaScript często zawierają obiekty:

Przykład

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

Nawet jeśli obiekty mają różne typy danych atrybutów:sort() Metoda może nadal być używana do sortowania tablic.

Rozwiązaniem jest użycie funkcji porównawczej do porównywania wartości atrybutów:

Przykład

cars.sort(function(a, b){zwróć a.year - b.year});

Spróbuj sam

Porównywanie atrybutów string jest bardziej skomplikowane:

Przykład

cars.sort(function(a, b){
	  var x = a.type.toLowerCase();
	  var y = b.type.toLowerCase();
	  jeśli (x < y) {zwróć -1;}
	  jeśli (x > y) {zwróć 1;}
	  zwróć 0;
});

Spróbuj sam