JavaScript Array Sorteren

sort() Deze methode is een van de krachtigste arraymethoden.

Array sorteren

sort() Methoden sorteren de array in alfabetische volgorde:

Voorbeeld

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

Probeer het zelf

Keer array om

reverse() De methode keert de elementen in de array om.

U kunt het gebruiken om een array in omgekeerde volgorde te sorteren:

Voorbeeld

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Sorteer elementen in fruits
fruits.reverse();         // Keer elementenvolgorde om

Probeer het zelf

Numerieke sortering

Standaardsort() De functie sorteert opStringsvolgorde de waarden sorteert.

Deze functie is geschikt voor strings ("Apple" komt voor "Banana").

Echter, als cijfers als strings worden gesorteerd, is "25" groter dan "100", omdat "2" groter is dan "1".

Omdatsort() De methode kan onjuiste resultaten produceren bij numerieke sortering.

We gebruiken eenVergelijksfunctieOm dit probleem op te lossen:

Voorbeeld

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

Probeer het zelf

Gebruik dezelfde techniek om een array in omgekeerde volgorde te sorteren:

Voorbeeld

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

Probeer het zelf

Vergelijksfunctie

Het doel van de vergelijksfunctie is een andere sorteerorde te definiëren.

De vergelijksfunctie moet een negatieve, nul of positieve waarde teruggeven, afhankelijk van de parameters:

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

Wanneer sort() Wanneer de functie twee waarden vergelijkt, stuurt deze de waarden naar de vergelijksfunctie en sorteert deze op basis van de teruggegeven waarde (negatief, nul of positief).

Voorbeeld:

Bij het vergelijken van 40 en 100,sort() De methode roept de vergelijksfunctie function(40,100) aan.

De functie berekent 40-100 en keert dan -60 (negatief) terug.

De sorteerfunctie zal 40 sorteren als een lagere waarde dan 100.

U kunt de volgende codefragment gebruiken om numerieke en alfabetische sortering te testen:

<button onclick="myFunction1()">Op alfabetische volgorde sorteren</button>
<button onclick="myFunction2()">Op numerieke volgorde sorteren</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>

Probeer het zelf

Sorteer het array in willekeurige volgorde

Voorbeeld

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

Probeer het zelf

Zoek de hoogste (of laagste) waarde van een array

JavaScript biedt geen ingebouwde functie om de hoogste of laagste waarde van een array te vinden.

Na het sorteren van het array kunt u de index gebruiken om de hoogste of laagste waarde te verkrijgen.

Oplopend sorteren:

Voorbeeld

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// Nu bevat points[0] de laagste waarde
// En points[points.length-1] bevat de hoogste waarde

Probeer het zelf

Afslopend sorteren:

Voorbeeld

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// Nu bevat points[0] de hoogste waarde
// En points[points.length-1] bevat de laagste waarde

Probeer het zelf

Als u alleen de hoogste of laagste waarde wilt vinden, is het sorteren van het hele array een zeer inefficiënte methode.

het gebruik van Math.max() op het array toepassen

U kunt Math.max.apply om de hoogste waarde in het array te vinden:

Voorbeeld

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

Probeer het zelf

Math.max.apply([1, 2, 3]) is gelijk aan Math.max(1, 2, 3).

het gebruik van Math.min() op het array toepassen

U kunt Math.min.apply om de laagste waarde in het array te vinden:

Voorbeeld

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

Probeer het zelf

Math.min.apply([1, 2, 3]) is gelijk aan Math.min(1, 2, 3).

Mijn Min / Max JavaScript-methode

De snelste oplossing is het gebruik van een 'zelfgemaakt' method.

Deze functie loopt door het array heen en vergelijkt elke waarde met de hoogste waarde die ze vinden:

Voorbeeld (zoek Max)

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

Probeer het zelf

Deze functie loopt door het array heen en vergelijkt elke waarde met de laagste waarde die ze vinden:

Voorbeeld (zoek Min)

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

Probeer het zelf

Sorteer objectarrays

JavaScript arrays bevatten vaak objecten:

Voorbeeld

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

Zelfs als objecten verschillende datatypen hebben voor hun eigenschappen:sort() Deze methode kan nog steeds gebruikt worden om arrays te sorteren.

De oplossing is om een vergelijkingsfunctie te gebruiken om eigenschapswaarden te vergelijken:

Voorbeeld

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

Probeer het zelf

Het vergelijken van string-eigenschappen is iets complexer:

Voorbeeld

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

Probeer het zelf