2013-04-27 16 views
10

मेरे पास ऑब्जेक्ट्स की एक सरणी है और मैं एएससी को 'होम' के मूल्य से सरणी करना चाहता हूं। वह क्षेत्र हमेशा संख्यात्मक है। तो मैं इस की कोशिश की है:अंडरस्कोर सॉर्ट का उपयोग करके ऑब्जेक्ट्स को सॉर्ट करना, विधि

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

कि अच्छी तरह से जब 'घर' का मूल्य तो 10 से कम है, लेकिन किसी कारण 10 के लिए बस के बाद 1 चला जाता है, तो मेरा अंतिम आदेश में इस 1,10 तरह लग रहा है काम कर रहा है , 11,2,3,4,5,6,7,8,9। ये क्यों हो रहा है? धन्यवाद ...

उत्तर

27

आपके obj.home मान स्ट्रिंग हैं इसलिए उनकी तुलना तारों के रूप में की जा रही है और '1' < '10' सत्य है। आप उन्हें नंबर की तरह सॉर्ट करने के लिए चाहते हैं, तो उन्हें संख्या में कन्वर्ट:

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

या:

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

डेमो: http://jsfiddle.net/ambiguous/DpfgV/1/

+0

वापसी parseInt (obj.home, 10) ==> आप कर सकते हैं वापस 'obj.home * 1' करें और parseInt – ncubica

+1

@ncubica का उपयोग किये बिना चाल बनायेगा: मुझे लगता है कि 'obj.home' अधिक सामान्य शॉर्टकट है। –

+0

लेकिन 'obj.home' स्ट्रिंग संख्याओं को जोड़ देगा, उदाहरण के लिए यदि आपके पास' 10 (int) + "00" (str) 'परिणाम है तो यह '1000' होगा, लेकिन यदि आप' 10 + ("00" * 1) 'परिणाम 10 होगा। जो आप सही उम्मीद कर रहे हैं? – ncubica

संबंधित मुद्दे