2012-03-02 12 views
10

पर आधारित संग्रह को सॉर्ट करने के लिए अंडरस्कोर का उपयोग करना मेरे पास रीढ़ की हड्डी संग्रह है जिसमें उनके साथ जुड़े दिनांक विशेषताओं वाले मॉडल का समूह है। मैं उन्हें उनकी तिथियों के आधार पर सॉर्ट करना चाहता हूं। तो नवीनतम तारीखें पहले और इतने पर। इस के आसपास जाने का सबसे अच्छा तरीका क्या है।दिनांक

तिथियां इस तरह की प्रारूपित हैं, मूल तिथि वस्तु। दिनांक {सोम मार्च 05 2012 23:30:00 GMT-0500 (ईएसटी)}

धन्यवाद

उत्तर

36

ताकि आप getTime का उपयोग उन्हें संख्या में बदलने के लिए और फिर उन संख्याओं को नकारना कर सकते हैं अधिकतम लाभ उठाने के लिए आप दिनांक वस्तुओं है पहले की तारीखें। यदि आप अपने संग्रह को सॉर्ट करना चाहते हैं तो इस तरह एक तुलनित्र:

C = Backbone.Collection.extend({ 
    //... 
    comparator: function(m) { 
     return -m.get('date').getTime(); 
    } 
}); 

चाल करेगा। डेमो (अपने कंसोल खोलने के कृपया): http://jsfiddle.net/ambiguous/htcyh/

बैकबोन संग्रह भी include अंडरस्कोर के sortBy तो आप एक बार की तरह कर सकता है:

var sorted = c.sortBy(function(m) { return -m.get('date').getTime() }); 

डेमो: http://jsfiddle.net/ambiguous/FF5FP/

या आप toArray का उपयोग पाने के लिए कर सकता है एक सामान्य जावास्क्रिप्ट सरणी और getTime:

var sorted = c.toArray().sort(function(a, b) { 
    a = a.get('date'); 
    b = b.get('date'); 
    if(a > b) 
     return -1; 
    if(a < b) 
     return 1; 
    return 0; 
}); 
का उपयोग किये बिना मानक sort का उपयोग करें

डेमो: http://jsfiddle.net/ambiguous/QRmJ4/

+0

मैं तुलनित्र विधि बहुत साफ है और सरल पसंद है। एक सवाल यह था कि सॉर्ट उलटने का एक तरीका है। तो तारीख की तारीख वर्तमान तारीख तक है जो पहले होगी और आखिरी नहीं है जैसे कि यह निम्नलिखित का उपयोग कर रहा है। तुलनित्र: फ़ंक्शन (एम) { वापसी m.get ('date')। getTime(); } – Chapsterj

+0

मुझे अभी एहसास हुआ कि मेरी तिथियां डेट ऑब्जेक्ट के रूप में नहीं हैं लेकिन 201203051400 के मूल्य के रूप में, इसलिए मुझे लगता है कि यह समस्या पैदा कर रही है। क्या स्ट्रिंग मान से निपटने का कोई तरीका है और अभी भी एक ही सेटअप का उपयोग करें या मूल्य को पहले ऑब्जेक्ट में बदलना बेहतर होगा और फिर तुलनित्र विधि करें। – Chapsterj

+0

@ चैपलस्टर: यदि आपके पास डेट ऑब्जेक्ट्स हैं तो आप 'your_date - new date' या 'new Date - your_date' को उचित रूप से देख सकते हैं। यदि आपकी तिथियां आईएसओ -8601-ईश स्ट्रिंग हैं तो आप उन्हें तुलनित्र फ़ंक्शन में तिथियों में परिवर्तित कर सकते हैं या आप (बेहतर IMHO) उन्हें अपने डेटा लोड और पार्स करते समय डेट ऑब्जेक्ट्स में कनवर्ट कर सकते हैं। –

3

आप तारीख की जानकारी के साथ तार आप कर सकते हैं है, तो ....

C = Backbone.Collection.extend({ 
///... 
    comparator: function(m) { 
     return -Date.parse(m.get('datestring')); 
    } 
}); 
संबंधित मुद्दे