2017-05-22 2 views
1

Ich muss ein Array von Daten im Format DD-MMMM-YYYY in aufsteigender Reihenfolge & absteigend Array durch eine Javascript-Funktion & Assert dieses Ergebnis mit einem statischen definierten Array . Ich habe versucht, Unten ist der Code aber scheint, wie seine teilweise Arbeits:Sortierung Daten Array in Asc & Desc Reihenfolge teilweise falsche Logik-Winkelmesser

it("Sorting DD-MMMM-YYYY Arrays",function(){ 
    var unsorted_array1=['25-Nov-2005','04-Aug-2015','04-Aug-2015','30-Jun-2006','26-Jun-2013','27-Jun-2013','15-Feb-2001','10-Jul-2012','29-May-2012']; 
    var unsorted_array2=['25-Nov-2005','04-Aug-2015','04-Aug-2015','30-Jun-2006','26-Jun-2013','27-Jun-2013','15-Feb-2001','10-Jul-2012','29-May-2012']; 

    var arraytobecompared_desc=['04-Aug-2015','04-Aug-2015','27-Jun-2013','26-Jun-2013','10-Jul-2012','29-May-2012','30-Jun-2006','25-Nov-2005','15-Feb-2001']; 
    var arraytobecompared_asc=['15-Feb-2001','25-Nov-2005','30-Jun-2006','29-May-2012','10-Jul-2012','26-Jun-2013','27-Jun-2013','04-Aug-2015','04-Aug-2015']; 


    var sorted_with_function_ascending= unsorted_array1.sort(function(a, b){ 
     var aa = a.split('-').reverse().join(), 
     bb = b.split('-').reverse().join(); 
     return aa < bb ? -1 : (aa > bb ? 1 : 0); 
    }); 

    var sorted_with_function_descending= unsorted_array2.sort(function(a, b){ 
     a = a.split('-'); 
     b = b.split('-'); 
     return b[2] - a[2] || b[1] - a[1] || b[0] - b[0]; 
    }); 


    console.log("Ascending dates- "+sorted_with_function_ascending); 
    console.log("Descending dates- "+sorted_with_function_descending); 

    expect(arraytobecompared_desc).toEqual(sorted_with_function_descending); 
    expect(arraytobecompared_asc).toEqual(sorted_with_function_ascending); 

    }) 

sowohl die aufsteigende & absteige Funktionen sind die Werte dazwischen Art falsche Rückkehr, die das erwarten Block verursacht zu scheitern.

+1

Das liegt wahrscheinlich daran, dass "Aug" alphabetisch vor "Jun" steht. Sie sollten Monatszahlen anstelle von Namen verwenden –

+0

Ich kann das Datumsformat nicht ändern. Können Sie Änderungen an der Funktion selbst vorschlagen? –

+0

Ja, siehe meine Antwort unten. –

Antwort

0

Hier ist, was ich kam mit:

let unsorted_array = ['25-Nov-2005','05-Aug-2015','04-Aug-2015','30-Jun-2006','26-Jun-2013','27-Jun-2013','15-Feb-2001','10-Jul-2012','29-May-2012'] 
 

 
var sortable = []; 
 
unsorted_array.forEach(date => { 
 
    sortable.push([ date, new Date(date).getTime() ]); 
 
}) 
 

 
sortable.sort((a, b) => a[1] - b[1]) 
 

 
let sorted_array = sortable.map(arr => arr[0]) 
 

 
console.log(sorted_array)

Ich baue ein Array mit:

[ 
    ["date", "corresponding timestamp"], 
    ["date", "corresponding timestamp"] 
] 

ich das Array von Zeitstempel sortieren Dann ((a, b) => a[1] - b[1])

dann extrahiere ich jedes erste Element mit Karte (arr => arr[0])

Die Ausgabe lautet:

["15-Feb-2001", "25-Nov-2005", "30-Jun-2006", "29-May-2012", "10-Jul-2012", "26-Jun-2013", "27-Jun-2013", "04-Aug-2015", "05-Aug-2015"] 

Für absteigender Reihenfolge, ersetzen a[1] - b[1] mit b[1] - a[1].

+0

Sie sind fantastisch. Danke vielmals !!!! –

+0

Sie sind herzlich willkommen :) –

Verwandte Themen