2013-08-28 12 views
19

Ich habe ein Array von float Punktzahl:Sortierung Array von float Punktzahl

[ 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 ] 

Nach Art ausgeführt wird() auf dem Array ich diese:

[ 28.86823689842918, 49.61295450928224, 5.861613903793295, 82.11742562118049 ] 

Beachten Sie, wie 5,8 ... ist größer als 49.6 ... für JavaScript (Node). Warum das?

Wie kann ich diese Nummern richtig sortieren?

+1

Verwenden Sie 'arr.sort (Funktion (a, b) {zurück a-b;});'. So wie es aussieht, werden die Werte alphabetisch sortiert. "2" kommt vor "4", was vor "5" kommt, was vor "8" kommt (der Vergleich ist der erste "Buchstabe" jeder Zahl ... bis sie übereinstimmen, vergleicht dann den nächsten Buchstaben und so weiter on) – Ian

+1

Zur Referenz: http://www.w3schools.com/jsref/jsref_sort.asp. Standardmäßig sortiert die Array-Sortiermethode von javascript alphabetisch und aufsteigend. Daher, warum Sie die Sortiermethode von @Ian übergeben –

+0

Im Allgemeinen beziehen sich nicht w3 Schulen, wie sie für eine breite Palette von Dingen falsch sein können. – jtromans

Antwort

30

Pass in einer Sortierfunktion:

[….].sort(function(a,b) { return a - b;}); 

Ergebnisse:

[5.861613903793295, 28.86823689842918, 49.61295450928224, 82.11742562118049] 

From MDN:

Wenn compareFunction nicht geliefert wird, Elemente sortiert werden, indem sie in Strings konvertiert und zu vergleichen Zeichenfolgen in lexikographischer Reihenfolge ("Wörterbuch" oder "Telefonbuch", nicht numerisch).

+0

Klammern passen nicht zusammen. – zsong

+1

@CrazyTrain - vielen Dank für die Bearbeitung. dachte, ich würde blind da gehen :) – dc5

+0

danke @ dc5 !!!!! – sustainablepace

2

Die integrierte JS-Sortierfunktion behandelt alles als Zeichenfolgen. Versuchen Sie Ihre eigene:

var numbers = new Array (82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295); 

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

numbers.sort(sortFloat); 
+1

sollten Sie stattdessen Array-Literal verwenden. '[...]', nicht 'neues Array (...)' –