2013-08-28 17 views
19

Mam tablicę liczb punktowych float:Sortowanie tablicę liczb punktowych obrocie

[ 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 ] 

Po działa sort() na tablicy uzyskać to:

[ 28.86823689842918, 49.61295450928224, 5.861613903793295, 82.11742562118049 ] 

zauważyć jak 5.8 ... jest większy niż 49,6 ... dla JavaScript (węzeł). Dlaczego?

Jak poprawnie posortować te numery?

+1

Użyj "arr.sort (function (a, b) {return a-b;});'. W obecnym stanie wartości są sortowane alfabetycznie. "2" występuje przed "4", czyli przed "5", przed "8" (porównanie jest pierwszą "literą" każdego numeru ... dopóki nie pasują, to porównuje następną literę i tak on) – Ian

+1

Dla odniesienia: http://www.w3schools.com/jsref/jsref_sort.asp. Domyślnie sortowanie tablicy javascript sortuje alfabetycznie i rosnąco. W związku z tym, dlaczego podajesz metodę sortowania dostarczoną przez @Ian –

+0

Ogólnie, nie odwołuj się do szkół w3, ponieważ mogą one być nieprawidłowe w szerokim zakresie rzeczy. – jtromans

Odpowiedz

30

przechodzą w funkcję sortowania:

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

Wyniki:

[5.861613903793295, 28.86823689842918, 49.61295450928224, 82.11742562118049] 

From MDN:

Jeśli compareFunction nie jest dostarczany, elementy są klasyfikowane według ich konwersję do strun i porównywania ciągi w porządku leksykograficznym ("słownik" lub "książka telefoniczna", a nie numeryczne).

+0

parenthesizes nie pasują. – zsong

+1

@CrazyTrain - dzięki za edycję. myślałem, że ślepo tam będę :) – dc5

+0

dzięki @ dc5 !!!!! – sustainablepace

2

Wbudowana funkcja sortowania JS traktuje wszystko jak struny. Spróbuj utworzyć własne:

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

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

numbers.sort(sortFloat); 
+1

powinieneś zamiast tego użyć literału tablicowego. '[...]', a nie 'nowa tablica (...)' –

Powiązane problemy