JavaScript array sortering

sortera() Metoden är en av de mest kraftfulla arraymetoderna.

Array sorter

sortera() Metoden sorterar arrayen i bokstavsordning:

exempel

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

Prova själv

Vänd array

reverse() Metoden vänder på elementen i en array.

Du kan använda det för att sortera en array i fallande ordning:

exempel

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Sortera elementen i fruits
fruits.reverse();         // Återvänd elementordningen

Prova själv

Numerisk sortering

Som standardsortera() Funktionen sorterarSträngordning för att sortera värden.

Funktionen är mycket lämplig för strängar ("Apple" kommer att ligga före "Banana").

Men om siffror sorteras som strängar, är "25" större än "100", eftersom "2" är större än "1".

Därförsortera() Metoden genererar felaktiga resultat när den sorterar numeriska värden.

Vi använder enJämförelsefunktionFör att rätta till detta problem:

exempel

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

Prova själv

Använd samma teknik för att sortera en array i fallande ordning:

exempel

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

Prova själv

Jämförelsefunktion

Syftet med jämförelsefunktionen är att definiera en annan sorteringsordning.

Jämförelsefunktionen bör returnera ett negativt, noll eller positivt värde beroende på parametrarna:

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

När sortera() När en funktion jämför två värden, skickas dessa värden till jämförelsefunktionen och värdena sorteras baserat på det returnerade värdet (negativt, noll eller positivt).

Exempel:

När jämförelse sker mellan 40 och 100:sortera() Metoden anropar jämförelsefunktionen function(40,100).

Funktionen räknar ut 40-100 och returnerar -60 (negativt värde).

Sorteringsfunktionen kommer att sortera 40 till ett lägre värde än 100.

Du kan använda följande kodsnutt för att testa numerisk och bokstavlig sortering:

<button onclick="myFunction1()">Sortera med bokstavlig ordning</button>
<button onclick="myFunction2()">Sortera med numerisk ordning</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>

Prova själv

Sortera arrayen i slumpmässig ordning

exempel

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

Prova själv

Sök högsta (eller lägsta) värdet i arrayen

JavaScript erbjuder inga inbyggda funktioner för att hitta högsta eller lägsta värdet i en array.

Men efter att ha sorterat arrayen kan du använda index för att få högsta eller lägsta värdet.

Sortera i stigande ordning:

exempel

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// Nu innehåller points[0] lägsta värdet
// Och points[points.length-1] innehåller högsta värdet

Prova själv

Sortera i fallande ordning:

exempel

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// Nu innehåller points[0] högsta värdet
// Och points[points.length-1] innehåller lägsta värdet

Prova själv

Om du bara behöver hitta högsta eller lägsta värdet, är det mycket ineffektivt att sortera hela arrayen.

använd Math.max() på arrayen

Du kan använda Math.max.apply för att hitta det högsta värdet i arrayen:

exempel

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

Prova själv

Math.max.apply([1, 2, 3]) likaså Math.max(1, 2, 3).

använd Math.min() på arrayen

Du kan använda Math.min.apply för att hitta den lägsta värdet i arrayen:

exempel

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

Prova själv

Math.min.apply([1, 2, 3]) likaså Math.min(1, 2, 3).

Mina Min / Max JavaScript-metoder

Den snabbaste lösningen är att använda en "egen" metod.

Denna funktion genomgår arrayen och jämför den hittade högsta värdet med varje värde:

Exempel (sök Max)

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

Prova själv

Denna funktion genomgår arrayen och jämför den hittade lägsta värdet med varje värde:

Exempel (sök Min)

function myArrayMin(arr) {
    var len = arr.length
    var min = Oändlighet;
    medan (len--) {
        om (arr[len] < min) {
            min = arr[len];
        }
    }
    return min;
}

Prova själv

Sortera objektsarray

JavaScript-array innehåller ofta objekt:

exempel

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

Även om objekt har olika datatyper för egenskaper:sortera() Metoden kan fortfarande användas för att sortera en array.

Lösningen är att använda en jämförelsefunktion för att jämföra attributvärden:

exempel

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

Prova själv

Det är något mer komplicerat att jämföra strängattribut:

exempel

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

Prova själv