2017-10-04 1 views
0

Ich habe den folgenden Satz von Array von Strings, wo ich die endgültige Ausgabe auf die Termine der Grundlage neu anordnen müssen, die frühestens ältesteDaten Rearrange basierend auf Daten

[ 
    "2015-08, xyz, 4", 
    "2016-03, abc, 5", 
    "2015-12, ter, 76", 
    "2015-12, rep, 14" 
] 

Die endgültige Ausgabe Bedürfnisse sortiert werden müssen sieht aus wie

[ 
    "2016-03, abc, 5", 
    "2015-12, ter, 76, rep, 14", 
    "2015-08, xyz, 4" 
] 

Wie kann ich das tun?

+1

und was genau ist Ihre Frage hier? Oder hoffen Sie nur, dass jemand die ganze harte Arbeit für Sie erledigen wird? – Liam

+0

@Liam absolut nicht, nur auf der Suche nach einer Anleitung zur Annäherung an das Problem (Pseudocode-Format) – RRP

+0

Verwenden Sie einfach Standard .sort() und dann das Array umkehren. Solange die Zeichenfolge mit dem Jahr beginnt, gefolgt von den zwei Zahlen von daya, funktioniert .sort(). Reverse(). Es wird nur schwierig, wenn Daten nicht in einem Format geschrieben werden, das es erlaubt, nach dem String-Wert anstatt nach dem tatsächlichen Datum zu sortieren. (zB kann das Euro-Format von DD/MM/YYYY nicht standardmäßig als Strings sortiert werden.) Ich lasse Sie das Zusammenführen der Strings selbst herausfinden, da es nichts mit der Sortierung zu tun hat. – Shilly

Antwort

2

Keine vollständige Lösung, aber Sie erhalten eine Basis, um Ihre zu implementieren.

Sortieren Sie Ihre Daten:

Die Idee ist, dass Sie eine Funktion (SortByDate in unserem Beispiel) zu definieren, die die Logik enthält, wie zwei Ihrer Array-Elemente vergleichen und dann die Standard sort Funktion mit Parameter aufrufen die neue Funktion, die Sie definiert haben.

data = [ 
 
    "2015-08, xyz, 4", 
 
    "2016-03, abc, 5", 
 
    "2015-12, ter, 76", 
 
    "2015-12, rep, 14" 
 
]; 
 

 

 

 
//This is the logic 
 
function SortByDate(a, b){ 
 
    dateA = a.split(",")[0];  // e.g. a="2015-08, xyz, 4" dateA="2015-08" 
 
    yearA = dateA.split("-")[0]; // e.g. "2015" 
 
    monthA = dateA.split("-")[1]; // e.g. "08" 
 
    
 
    dateB = b.split(",")[0]; 
 
    yearB = dateB.split("-")[0]; 
 
    monthB = dateB.split("-")[1]; 
 
    
 
    if (parseInt(yearA) < parseInt(yearB)) return -1; 
 
    if (parseInt(yearA) > parseInt(yearB)) return 1; 
 
    if (parseInt(yearA) == parseInt(yearB)) { 
 
    if (parseInt(monthA) < parseInt(monthB)) return -1; 
 
    if (parseInt(monthA) > parseInt(monthB)) return 1; 
 
    if (parseInt(monthA) == parseInt(monthB)) return 0; 
 
    } 
 

 
} 
 

 
data.sort(SortByDate); 
 
console.log(data);

Nächste Schritte:

  1. iterieren Array wieder
  2. , wenn Sie gleich Daten
  3. finden verschmelzen diese Elemente

Der letzte Teil könnte schwierig sein, weil Ihr Array einige Elemente verliert und seine Größe abnimmt. Vielleicht möchten Sie einen Blick darauf werfen: Looping through array and removing items.

+1

Danke @tgogos ich verwendet .sort(). Reverse(), aber die Verknüpfung zum Zusammenführen und Entfernen des Elements hilft – RRP

Verwandte Themen