2013-04-27 6 views
10

Ich habe ein Array von Objekten und ich möchte ASC Array durch den Wert von "home" sortieren. Dieses Feld ist immer numerisch. Also habe ich versucht, dies:Sortierung Array von Objekten mit dem Unterstrich sortBy-Methode

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

, das gut funktioniert, wenn der Wert von ‚zu Hause‘ ist niedriger als 10, aber aus irgendeinem Grund 10 geht direkt nach der 1, so dass meine endgültige Reihenfolge wie folgt aussieht 1,10 , 11,2,3,4,5,6,7,8,9. Warum passiert dies? Danke ...

Antwort

27

Ihre obj.home Werte sind Zeichenfolgen, so dass sie als Zeichenfolgen verglichen werden und '1' < '10' ist wahr. Wenn man sie wie Zahlen sortieren wollen, dann diese in Zahlen konvertieren:

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

oder:

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

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

+0

Rückkehr parseInt (obj.home, 10) ==> können Sie gib 'obj.home * 1' zurück und mache den Trick ohne parseInt zu verwenden – ncubica

+1

@ncubica: Ich denke,' + obj.home' ist die gebräuchlichste Abkürzung. –

+0

aber '+ obj.home' wird string not numbers als Beispiel hinzufügen, wenn Sie' 10 (int) + "00" (str) 'result haben, wird es' 1000' sein, aber wenn Sie '10 + schreiben (" 00 " * 1) 'das Ergebnis wird 10. Welches ist was erwarten Sie richtig? – ncubica

Verwandte Themen