Pole řazení JavaScriptu
Třídění pole
Metoda sort()
seřadí pole podle abecedy:
Příklad
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
Obrácení pole
Metoda reverse()
obrátí prvky v poli.
Můžete jej použít k seřazení pole v sestupném pořadí:
Příklad
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
Číselné řazení
Ve výchozím nastavení sort()
funkce třídí hodnoty jako řetězce .
To funguje dobře pro řetězce ("Apple" je před "Banana").
Pokud jsou však čísla seřazena jako řetězce, "25" je větší než "100", protože "2" je větší než "1".
Z tohoto důvodu sort()
způsobí při řazení čísel nesprávný výsledek.
Můžete to opravit poskytnutím funkce porovnání :
Příklad
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
Použijte stejný trik k seřazení pole sestupně:
Příklad
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
Funkce porovnání
Účelem porovnávací funkce je definovat alternativní pořadí řazení.
Funkce porovnání by měla vrátit zápornou, nulovou nebo kladnou hodnotu v závislosti na argumentech:
function(a, b){return a - b}
Když sort()
funkce porovná dvě hodnoty, odešle hodnoty do porovnávací funkce a seřadí hodnoty podle vrácené (záporné, nulové, kladné) hodnoty.
Pokud je výsledek negativní, a
seřadí se před
b
.
Pokud je výsledek kladný, b
seřadí se před a
.
Pokud je výsledek 0, neprovedou se žádné změny v pořadí řazení dvou hodnot.
Příklad:
Funkce porovnání porovná všechny hodnoty v poli, dvě hodnoty najednou (a, b)
.
Při porovnávání 40 a 100 sort()
metoda volá funkci porovnání (40, 100).
Funkce vypočítá 40 - 100 (a - b)
, a protože výsledek je záporný (-60), třídicí funkce seřadí 40 jako hodnotu nižší než 100.
Tento fragment kódu můžete použít k experimentování s číselným a abecedním řazením:
<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>
Třídění pole v náhodném pořadí
Příklad
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()});
Metoda Fisher Yates
Výše uvedený příklad pole .sort() není přesný, upřednostní některá čísla před ostatními.
Nejpopulárnější správná metoda se nazývá Fisher Yates shuffle a byla zavedena do datové vědy již v roce 1938!
V JavaScriptu lze metodu přeložit na toto:
Příklad
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
}
Najděte nejvyšší (nebo nejnižší) hodnotu pole
Neexistují žádné vestavěné funkce pro nalezení maximální nebo minimální hodnoty v poli.
Po seřazení pole však můžete použít index k získání nejvyšší a nejnižší hodnoty.
Řazení vzestupně:
Příklad
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
Sestupné řazení:
Příklad
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
Řazení celého pole je velmi neefektivní metoda, pokud chcete najít pouze nejvyšší (nebo nejnižší) hodnotu.
Použití Math.max() na poli
Math.max.apply
K nalezení nejvyššího čísla v poli můžete použít :
Příklad
function myArrayMax(arr) {
return Math.max.apply(null, arr);
}
Math.max.apply(null, [1, 2, 3])
je ekvivalentní Math.max(1, 2, 3)
.
Použití Math.min() na poli
Math.min.apply
K nalezení nejnižšího čísla v poli můžete použít :
Příklad
function myArrayMin(arr) {
return Math.min.apply(null, arr);
}
Math.min.apply(null, [1, 2, 3])
je ekvivalentní Math.min(1, 2, 3)
.
Moje minimální / maximální metody JavaScriptu
Nejrychlejším řešením je použití „home made“ metody.
Tato funkce prochází polem a porovnává každou hodnotu s nejvyšší nalezenou hodnotou:
Příklad (najít maximum)
function myArrayMax(arr) {
let len = arr.length;
let max = -Infinity;
while (len--) {
if (arr[len] > max) {
max = arr[len];
}
}
return max;
}
Tato funkce prochází polem a porovnává každou hodnotu s nejnižší nalezenou hodnotou:
Příklad (Najít min)
function myArrayMin(arr) {
let len = arr.length;
let min = Infinity;
while (len--) {
if (arr[len] < min) {
min = arr[len];
}
}
return min;
}
Třídění objektových polí
Pole JavaScriptu často obsahují objekty:
Příklad
const cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}
];
I když objekty mají vlastnosti různých datových typů, sort()
metodu lze použít k seřazení pole.
Řešením je napsat porovnávací funkci pro porovnání hodnot vlastností:
Příklad
cars.sort(function(a, b){return a.year - b.year});
Porovnání vlastností řetězců je trochu složitější:
Příklad
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;
});
Kompletní reference pole
Úplnou referenci Array naleznete na naší stránce:
Kompletní reference JavaScript Array .
Odkaz obsahuje popisy a příklady všech vlastností a metod Array.