2013-04-27 2 views
10

Ho una matrice di oggetti e voglio ordinare ASC quella matrice per il valore di 'casa'. Quel campo è sempre numerico. Così ho provato questo:Ordinamento della matrice di oggetti usando il metodo di ordinamento del carattere di sottolineatura

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

che sta lavorando bene quando il valore di 'casa' è più bassa di 10, ma per qualche motivo il 10 va solo dopo l'1, quindi il mio ordine finale assomiglia a questa 1,10 , 11,2,3,4,5,6,7,8,9. Perché sta succedendo? Grazie ...

risposta

27

I tuoi valori obj.home sono stringhe quindi vengono confrontati come stringhe e '1' < '10' è true. Se si desidera ordinare loro come i numeri poi convertirli in numeri:

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

o:

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

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

+0

parseInt ritorno (obj.home, 10) ==> è possibile restituire 'obj.home * 1' e renderà il trucco senza usare parseInt – ncubica

+1

@ncubica: Penso che' + obj.home' è la scorciatoia più comune. –

+0

ma '+ obj.home' aggiungerà string non numeri come per esempio se si ha' 10 (int) + "00" (str) 'risultato sarà' 1000' ma se si scrive '10 + (" 00 " * 1) 'il risultato sarà 10. quale è quello che stai aspettando giusto? – ncubica