Tablice sortujące JavaScript
Sortowanie tablicy
Metoda sort()
sortuje tablicę alfabetycznie:
Przykład
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
Odwracanie tablicy
Metoda reverse()
odwraca elementy w tablicy.
Możesz go użyć do posortowania tablicy w kolejności malejącej:
Przykład
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
Sortowanie numeryczne
Domyślnie sort()
funkcja sortuje wartości jako ciągi .
Działa to dobrze w przypadku ciągów ("Apple" znajduje się przed "Banana").
Jeśli jednak liczby są sortowane jako ciągi, „25” jest większe niż „100”, ponieważ „2” jest większe niż „1”.
Z tego powodu sort()
metoda da błędny wynik podczas sortowania liczb.
Możesz to naprawić, udostępniając funkcję porównania :
Przykład
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
Użyj tej samej sztuczki, aby posortować tablicę malejąco:
Przykład
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
Funkcja porównania
Celem funkcji porównania jest zdefiniowanie alternatywnej kolejności sortowania.
Funkcja porównania powinna zwrócić wartość ujemną, zerową lub dodatnią, w zależności od argumentów:
function(a, b){return a - b}
Gdy sort()
funkcja porównuje dwie wartości, wysyła wartości do funkcji porównania i sortuje wartości zgodnie z wartością zwróconą (ujemną, zerową, dodatnią).
Jeśli wynik jest ujemny a
, jest sortowany przed
b
.
Jeśli wynik jest pozytywny b
, sortowane jest przed a
.
Jeśli wynikiem jest 0, nie są dokonywane żadne zmiany w kolejności sortowania dwóch wartości.
Przykład:
Funkcja Compare porównuje wszystkie wartości w tablicy, po dwie wartości na raz (a, b)
.
Porównując 40 i 100, sort()
metoda wywołuje funkcję Compare(40, 100).
Funkcja oblicza 40 - 100 (a - b)
, a ponieważ wynik jest ujemny (-60), funkcja sortowania posortuje 40 jako wartość mniejszą niż 100.
Możesz użyć tego fragmentu kodu, aby poeksperymentować z sortowaniem liczbowym i alfabetycznym:
<button onclick="myFunction1()">Sort Alphabetically</button>
<button
onclick="myFunction2()">Sort Numerically</button>
<p id="demo"></p>
<script>
const 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>
Sortowanie tablicy w kolejności losowej
Przykład
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()});
Metoda Fishera Yatesa
Powyższy przykład, array .sort(), nie jest dokładny, faworyzuje niektóre liczby nad innymi.
Najpopularniejsza poprawna metoda, nazywana tasowaniem Fishera Yatesa, została wprowadzona do nauki o danych już w 1938 roku!
W JavaScript metodę można przetłumaczyć na to:
Przykład
const points = [40, 100, 1, 5, 25, 10];
for (let i = points.length -1; i > 0;
i--) {
let j = Math.floor(Math.random() * i)
let k = points[i]
points[i] = points[j]
points[j] = k
}
Znajdź najwyższą (lub najniższą) wartość tablicy
Nie ma wbudowanych funkcji do znajdowania wartości maksymalnej lub minimalnej w tablicy.
Jednak po posortowaniu tablicy można użyć indeksu, aby uzyskać najwyższe i najniższe wartości.
Sortowanie rosnąco:
Przykład
const 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
Sortowanie malejąco:
Przykład
const 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
Sortowanie całej tablicy jest bardzo nieefektywną metodą, jeśli chcesz znaleźć tylko najwyższą (lub najniższą) wartość.
Używanie Math.max() na tablicy
Możesz użyć Math.max.apply
, aby znaleźć najwyższą liczbę w tablicy:
Przykład
function myArrayMax(arr) {
return Math.max.apply(null, arr);
}
Math.max.apply(null, [1, 2, 3])
jest równoważne Math.max(1, 2, 3)
.
Używanie Math.min() na tablicy
Możesz użyć Math.min.apply
, aby znaleźć najniższą liczbę w tablicy:
Przykład
function myArrayMin(arr) {
return Math.min.apply(null, arr);
}
Math.min.apply(null, [1, 2, 3])
jest równoważne Math.min(1, 2, 3)
.
Moje min/maks. metody JavaScript
Najszybszym rozwiązaniem jest zastosowanie metody „domowej roboty”.
Ta funkcja przegląda tablicę porównując każdą wartość z najwyższą znalezioną wartością:
Przykład (Znajdź maksimum)
function myArrayMax(arr) {
let len = arr.length;
let max = -Infinity;
while (len--) {
if (arr[len] > max) {
max = arr[len];
}
}
return max;
}
Ta funkcja przegląda tablicę porównując każdą wartość z najniższą znalezioną wartością:
Przykład (Znajdź min)
function myArrayMin(arr) {
let len = arr.length;
let min = Infinity;
while (len--) {
if (arr[len] < min) {
min = arr[len];
}
}
return min;
}
Sortowanie tablic obiektów
Tablice JavaScript często zawierają obiekty:
Przykład
const cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}
];
Nawet jeśli obiekty mają właściwości różnych typów danych, sort()
metoda może służyć do sortowania tablicy.
Rozwiązaniem jest napisanie funkcji porównania do porównania wartości właściwości:
Przykład
cars.sort(function(a, b){return a.year - b.year});
Porównywanie właściwości ciągów jest nieco bardziej złożone:
Przykład
cars.sort(function(a, b){
let x = a.type.toLowerCase();
let y = b.type.toLowerCase();
if (x < y) {return -1;}
if (x > y) {return 1;}
return 0;
});
Pełne odniesienie do tablicy
Aby uzyskać pełne odniesienie do tablicy, przejdź do naszego:
Pełne odniesienie do tablicy JavaScript .
Odniesienie zawiera opisy i przykłady wszystkich właściwości i metod Array.