2013-10-17 11 views
30

मैंतारीख

var recent = [{id: "123",age :12,start: "10/17/13 13:07"} , {id: "13",age :62,start: "07/30/13 16:30"}]; 

दिनांक स्वरूप युक्त प्रत्येक वस्तु के साथ वस्तुओं की एक सरणी सॉर्ट करने के लिए कोशिश कर रहा हूँ से वस्तुओं की एक जावास्क्रिप्ट सरणी सॉर्ट करने के लिए कैसे है: mm/dd/yy hh:mm

मैं तिथि के क्रम में क्रमबद्ध करना चाहते हैं सबसे हालिया पहले के साथ। यदि तारीख समान है तो इसे समय पर हल किया जाना चाहिए।

मैंने नीचे दिए गए सॉर्ट फ़ंक्शन को आजमाया। लेकिन यह काम नहीं कर रहा है।

recent.sort(function(a,b)) 
{ 
    a = new Date(a.start); 
    b = new Date(b.start); 
    return a-b; 
}); 

मुझे सॉर्टिंग के लिए ऑब्जेक्ट्स के माध्यम से कैसे पुन: प्रयास करना चाहिए? कुछ ऐसा:

for (var i = 0; i < recent.length; i++) 
    { 
     recent[i].start.sort(function (a, b) 
     { 
      a = new Date(a.start); 
      b = new Date(b.start); 
      return a-b; 
     }); 
    } 

सरणी में कोई भी वस्तु हो सकती है।

+1

आपका 'हालिया' शाब्दिक गलत है। –

+2

पहला ब्लॉक मान्य जावास्क्रिप्ट – SheetJS

+1

हाल ही में ऑब्जेक्ट्स की मेरी सरणी का नाम नहीं है। क्या आप विस्तार से बता सकते हैं? – Anthea

उत्तर

49

जैसा कि टिप्पणियों में बताया गया है, हाल की परिभाषा सही जावास्क्रिप्ट नहीं है।

लेकिन यह सोचते हैं दिनांकों तार कर रहे हैं:

var recent = [ 
    {id: 123,age :12,start: "10/17/13 13:07"}, 
    {id: 13,age :62,start: "07/30/13 16:30"} 
]; 
तो

तरह इस तरह:

recent.sort(function(a,b) { 
    return new Date(a.start).getTime() - new Date(b.start).getTime() 
}); 

More details on sort function from W3Schools

+1

आप यहां इस विषय के कुछ उपयोगी उत्तर पा सकते हैं: ** [तिथि के अनुसार जावास्क्रिप्ट ऑब्जेक्ट ऐरे सॉर्ट करें] (http://stackoverflow.com/a/26759127/2247494) ** – jherax

+1

** नोट **: भूलना न भूलें स्पष्ट 'वापसी' घोषणा – pruett

+2

मुझे लगता है कि आपको 'getTime() 'या –

5
recent.sort(function(a,b) { return new Date(a.start).getTime() - new Date(b.start).getTime() }); 
+3

तुलनात्मक कार्य तर्कों के बीच संबंधों के आधार पर नकारात्मक, 0, या सकारात्मक लौटने वाला है, न कि बुलियन। – Barmar

+0

अच्छी तरह से देखा, मैंने अपना जवाब अपडेट कर दिया है। –

+0

तारीख वस्तुओं को घटाना स्पष्ट रूप से वही चीज़ देता है जो उनके 'getTime() 'मानों को घटाना है, हालांकि मुझे यह आवश्यकता किसी भी विनिर्देश में नहीं मिल सकती है। – Barmar

0

इस समारोह आप एक तुलनित्र कि करने के लिए एक रास्ता चलना होगा बनाने की अनुमति देता कुंजी आप इस पर तुलना करना चाहते हैं:

function createDateComparator (path = [] , comparator = (a, b) => a.getTime() - b.getTime()) { 
 
    return (a, b) => { 
 
    let _a = a 
 
    let _b = b 
 
    for(let key of path) { 
 
     _a = _a[key] 
 
     _b = _b[key] 
 
    } 
 
    return comparator(_a, _b) 
 
    } 
 
} 
 

 

 
const input = (
 
    [ { foo: new Date(2017, 0, 1) } 
 
    , { foo: new Date(2018, 0, 1) } 
 
    , { foo: new Date(2016, 0, 1) } 
 
    ] 
 
) 
 

 
const result = input.sort(createDateComparator([ 'foo' ])) 
 

 
console.info(result)

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