2013-04-27 15 views
10

Mam tablicę obiektów i chcę posortować ASC tej tablicy według wartości "domu". To pole jest zawsze numeryczne. Więc próbowałem to:Sortowanie tablic obiektów za pomocą metody podkreślenia SortujBike

_.sortBy(data.home.en, function(obj){ return obj.home }); 

To działa dobrze, gdy wartość „domu” jest niższa niż 10, ale z jakiegoś powodu 10 przechodzi tuż po 1, więc moja ostateczna kolejność wygląda następująco 1,10 11,2,3,4,5,6,7,8,9. Dlaczego to się dzieje? Dzięki ...

Odpowiedz

27

Twoje wartości obj.home są ciągami, więc są porównywane jako ciągi znaków i '1' < '10' jest prawdziwe. Jeśli chcesz, aby posortować je jak numery następnie konwertować je do numerów:

_.sortBy(data.home.en, function(obj){ return +obj.home }); 

czyli

_.sortBy(data.home.en, function(obj){ return parseInt(obj.home, 10) }); 

Demo: http://jsfiddle.net/ambiguous/DpfgV/1/

+0

powrotną parseInt (obj.home, 10) ==> można zwróć 'obj.home * 1' i zrobi lewę bez użycia parseInt – ncubica

+1

@ ncubica: Myślę, że' + obj.home' jest bardziej popularnym skrótem. –

+0

ale '+ obj.home' doda łańcuch, a nie liczby, tak jak na przykład, jeśli masz' 10 (int) + "00" (str) 'wynik to będzie' 1000' ale jeśli napiszesz '10 + (" 00 " * 1) 'Wynik będzie 10., co jest jego oczekiwaniem, prawda? – ncubica

Powiązane problemy