javascript - Hvordan sortere tall korrekt med Array.sort()?


I flere nettlesere sorterer ikke følgende kode tallene riktig:

a = new Array();
a.push(10);
a.push(60);
a.push(20);
a.push(30);
a.push(100);
document.write(a.sort())

Den returnerer 10,100,20,30,60.

Noen som vet hvorfor?

Svar #1

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

Disse kan være forvirrende.... sjekk ut denne lenken.

Svar #2

Jeg har prøvd forskjellige tall, og det oppfører seg alltid som om nullene ikke er der og sorterer tallene riktig ellers. Vet noen hvorfor?

Du får en leksikografisk sortering (f.eks. konverter objekter til strenger, og sorter dem i ordbokorden), som er standard sorteringsadferd i Javascript:

https://developer.mozilla.org/no/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

array.sort([compareFunction])

Parametere

sammenligningsfunksjon

Spesifiserer en funksjon som definerer sorteringsrekkefølgen. Hvis den utelates, blir arrayet sortert leksikografisk (i ordboksrekkefølge) i henhold til strengkonverteringen av hvert element.

I ECMAscript-spesifikasjonen (den normative referansen for den generiske Javascript), ECMA-262, 3. utg., seksjon 15.4.4.11, er standard sorteringsrekkefølge leksikografisk, selv om de ikke sier det direkte, i stedet gir de trinnene for en konseptuell sorteringsfunksjon som kaller den gitte sammenligningsfunksjonen om nødvendig, ellers sammenligner argumentene når de er konvertert til strenger:

13. If the argument comparefn is undefined, go to step 16.
14. Call comparefn with arguments x and y.
15. Return Result(14).
16. Call ToString(x).
17. Call ToString(y).
18. If Result(16) < Result(17), return −1.
19. If Result(16) > Result(17), return 1.
20. Return +0.

Svar #3

Den standard sorteringen for arrays i Javascript er en alfabetisk søk. Hvis du vil ha en numerisk sortering, prøv noe som dette:

var a = [ 1, 100, 50, 2, 5];
a.sort(function(a,b) { return a - b; });

Svar #4

Du kan bruke en sorteringsfunksjon :

var myarray=[25, 8, 7, 41]
myarray.sort( function(a,b) { return a - b; } );
// 7 8 25 41

Se på http://www.javascriptkit.com/javatutors/arraysort.shtml

Relaterte artikler