JavaScript arraysortering

sort() Metoden er en af de kraftigste arraymetoder.

Array sortering

sort() Metoder sorterer arrayer i alfabetisk rækkefølge:

Eksempel

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Sorter elementerne i fruits

Prøv det selv

Omdrej array

reverse() metode til at omdreje elementerne i arrayet.

Du kan bruge det til at sortere arrayet i faldende rækkefølge:

Eksempel

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Sorter elementerne i fruits
fruits.reverse();         // Omdrej elementernes rækkefølge

Prøv det selv

Numerisk sortering

Som standardsort() Funktionen sorterer efterstrengrækkefølge til at sortere værdierne.

Funktionen er velegnet til strenge ("Apple" vil komme før "Banana").

Men hvis tal sorteres som strenge, er "25" større end "100", fordi "2" er større end "1".

Af den grundsort() Metoden kan generere forkerte resultater, når den sorterer numeriske værdier.

Vi bruger enForholdsfunktionFor at rette dette problem:

Eksempel

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

Prøv det selv

Brug samme teknik til at sortere arrayet i faldende rækkefølge:

Eksempel

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

Prøv det selv

Forholdsfunktion

Formålet med sammenligningsfunktionen er at definere en anden sorteringsrækkefølge.

Sammenligningsfunktionen skal returnere en negativ, zero eller positiv værdi afhængigt af parametrene:

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

Når sort() Når funktionen sammenligner to værdier, sender den værdierne til sammenligningsfunktionen og sorterer dem baseret på den returnerede værdi (negativ, zero eller positiv værdi).

Eksempel:

Når man sammenligner 40 og 100,sort() Metoden kalder sammenligningsfunktionen function(40,100).

Funktionen beregner 40-100, og returnerer derefter -60 (en negativ værdi).

Sorteringsfunktionen vil sortere 40 til en lavere værdi end 100.

Du kan bruge følgende kodeudsnit til at teste numerisk og alfabetisk sortering:

<button onclick="myFunction1()">Sorter efter alfabetisk rækkefølge</button>
<button onclick="myFunction2()">Sorter efter numerisk rækkefølge</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>

Prøv det selv

Sorter arrayet i tilfældig rækkefølge

Eksempel

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

Prøv det selv

Find den højeste (eller laveste) værdi i et array

JavaScript tilbyder ikke indbyggede funktioner til at finde den største eller mindste værdi i et array.

Men efter at have sorteret arrayet, kan du bruge indekser til at få fat i den højeste eller laveste værdi.

Sorter opadgående:

Eksempel

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// Nu indeholder points[0] den laveste værdi
// Og points[points.length-1] indeholder den højeste værdi

Prøv det selv

Sorter nedadgående:

Eksempel

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// Nu indeholder points[0] den højeste værdi
// Og points[points.length-1] indeholder den laveste værdi

Prøv det selv

Hvis du kun har brug for at finde den højeste eller laveste værdi, er det meget ineffektivt at sortere hele arrayet.

anvend Math.max() på arrayet

Du kan bruge Math.max.apply for at finde den højeste værdi i arrayet:

Eksempel

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

Prøv det selv

Math.max.apply([1, 2, 3]) er lig med Math.max(1, 2, 3).

til at anvende Math.min() på arrayet

Du kan bruge Math.min.apply for at finde den laveste værdi i arrayet:

Eksempel

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

Prøv det selv

Math.min.apply([1, 2, 3]) er lig med Math.min(1, 2, 3).

Min / Max JavaScript-metoder

Den hurtigste løsning er at bruge en "egen" metode.

Denne funktion gennemgår arrayet og sammenligner den fundne højeste værdi med hver værdi:

eksempel (søg Max)

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

Prøv det selv

Denne funktion gennemgår arrayet og sammenligner den fundne laveste værdi med hver værdi:

eksempel (søg Min)

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

Prøv det selv

Sorter objekt arrayer

JavaScript arrayer indeholder ofte objekter:

Eksempel

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

Selvom objekter har forskellige data typer egenskaber,sort() Metoden kan stadig bruges til at sortere arrayer.

Løsningen er at bruge en sammenligningsfunktion til at sammenligne egenskabsværdier:

Eksempel

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

Prøv det selv

Det er lidt mere komplekst at sammenligne streng egenskaber:

Eksempel

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;
});

Prøv det selv