JavaScript Sorteer Skikkings
Sorteer 'n skikking
Die sort()
metode sorteer 'n skikking alfabeties:
Voorbeeld
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
Omkeer van 'n skikking
Die reverse()
metode keer die elemente in 'n skikking om.
Jy kan dit gebruik om 'n skikking in dalende volgorde te sorteer:
Voorbeeld
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
Numeriese Sorteer
By verstek sort()
sorteer die funksie waardes as stringe .
Dit werk goed vir snare ("Apple" kom voor "Piesang").
As getalle egter as stringe gesorteer word, is "25" groter as "100", want "2" is groter as "1".
As gevolg hiervan sal die sort()
metode verkeerde resultate lewer wanneer getalle gesorteer word.
U kan dit regstel deur 'n vergelykingsfunksie te verskaf :
Voorbeeld
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
Gebruik dieselfde truuk om 'n skikking afwaarts te sorteer:
Voorbeeld
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
Die Vergelyk funksie
Die doel van die vergelykingsfunksie is om 'n alternatiewe sorteervolgorde te definieer.
Die vergelykingsfunksie moet 'n negatiewe, nul of positiewe waarde terugstuur, afhangende van die argumente:
function(a, b){return a - b}
Wanneer die sort()
funksie twee waardes vergelyk, stuur dit die waardes na die vergelykingsfunksie, en sorteer die waardes volgens die teruggekeerde (negatiewe, nul, positiewe) waarde.
As die resultaat negatief a
is, word voor gesorteer
b
.
As die resultaat positief b
is, word voor gesorteer a
.
As die resultaat 0 is, word geen veranderinge met die sorteervolgorde van die twee waardes aangebring nie.
Voorbeeld:
Die vergelyk-funksie vergelyk al die waardes in die skikking, twee waardes op 'n slag (a, b)
.
Wanneer 40 en 100 vergelyk word, sort()
roep die metode die vergelykingsfunksie (40, 100).
Die funksie bereken 40 - 100 (a - b)
, en aangesien die resultaat negatief is (-60), sal die sorteerfunksie 40 as 'n waarde laer as 100 sorteer.
Jy kan hierdie kodebrokkie gebruik om te eksperimenteer met numeriese en alfabetiese sortering:
<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>
Sorteer 'n skikking in ewekansige volgorde
Voorbeeld
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()});
Die Fisher Yates-metode
Die voorbeeld hierbo, array .sort(), is nie akkuraat nie, dit sal sommige getalle bo die ander bevoordeel.
Die gewildste korrekte metode, word die Fisher Yates-skuifel genoem, en is so vroeg as 1938 in datawetenskap bekendgestel!
In JavaScript kan die metode hierna vertaal word:
Voorbeeld
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
}
Vind die hoogste (of laagste) skikkingswaarde
Daar is geen ingeboude funksies om die maksimum of min waarde in 'n skikking te vind nie.
Nadat jy egter 'n skikking gesorteer het, kan jy die indeks gebruik om die hoogste en laagste waardes te verkry.
Sorteer stygend:
Voorbeeld
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
Sorteer dalende:
Voorbeeld
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
Om 'n hele skikking te sorteer is 'n baie ondoeltreffende metode as jy net die hoogste (of laagste) waarde wil vind.
Gebruik Math.max() op 'n Array
Jy kan gebruik Math.max.apply
om die hoogste getal in 'n skikking te vind:
Voorbeeld
function myArrayMax(arr) {
return Math.max.apply(null, arr);
}
Math.max.apply(null, [1, 2, 3])
is gelykstaande aan Math.max(1, 2, 3)
.
Gebruik Math.min() op 'n Skikking
Jy kan gebruik Math.min.apply
om die laagste getal in 'n skikking te vind:
Voorbeeld
function myArrayMin(arr) {
return Math.min.apply(null, arr);
}
Math.min.apply(null, [1, 2, 3])
is gelykstaande aan Math.min(1, 2, 3)
.
My Min / Max JavaScript-metodes
Die vinnigste oplossing is om 'n "tuisgemaakte" metode te gebruik.
Hierdie funksie loop deur 'n skikking wat elke waarde vergelyk met die hoogste waarde wat gevind is:
Voorbeeld (Vind maksimum)
function myArrayMax(arr) {
let len = arr.length;
let max = -Infinity;
while (len--) {
if (arr[len] > max) {
max = arr[len];
}
}
return max;
}
Hierdie funksie loop deur 'n skikking wat elke waarde vergelyk met die laagste waarde wat gevind is:
Voorbeeld (Vind Min)
function myArrayMin(arr) {
let len = arr.length;
let min = Infinity;
while (len--) {
if (arr[len] < min) {
min = arr[len];
}
}
return min;
}
Sorteer voorwerpskikkings
JavaScript-skikkings bevat dikwels voorwerpe:
Voorbeeld
const cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}
];
Selfs as voorwerpe eienskappe van verskillende datatipes het, kan die sort()
metode gebruik word om die skikking te sorteer.
Die oplossing is om 'n vergelykingsfunksie te skryf om die eiendomswaardes te vergelyk:
Voorbeeld
cars.sort(function(a, b){return a.year - b.year});
Om string eienskappe te vergelyk is 'n bietjie meer kompleks:
Voorbeeld
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;
});
Voltooi Skikkingsverwysing
Vir 'n volledige Array-verwysing, gaan na ons:
Voltooi JavaScript Array Reference .
Die verwysing bevat beskrywings en voorbeelde van alle Array-eienskappe en -metodes.