Ich habe einen Array-Snapshot aus Firebase, die die Einträge meiner Anwendung enthält. Neben anderen Informationen gibt es aa Zeitstempel „referenceDate“ genannt:Javascript: Erstellen eines Arrays aus einem anderen
entry [0] { referenceDate: 2017-08-03,...
entry [1] { referenceDate: 2017-08-02,...
entry [2] { referenceDate: 2017-08-01,...
entry [3] { referenceDate: 2017-07-03,...
entry [4] { referenceDate: 2017-07-02,...
ich ausgeben möchte, dass die unter einer Überschrift gruppierten Einträge nach Monat und Jahr wie diese
08.2017
03.08.2017
02.08.2017
01.08.2018
07.2017
03.07.2017
02.07.2017
Meine Idee ist, eine Schleife über das Array -snapshot und eine weitere verschachtelte erstellen, die wie folgt aussieht: mit zwei ineinander geschachtelten ngFor
{"monthYear": "08.2017":[
{"referenzDatum": 2017-08-03},... },
{"referenzDatum": 2017-08-02},... },
{"referenzDatum": 2017-08-01},... },]},
{"monthYear": "07.2017":[
{"referenzDatum": 2017-07-03},... },
{"referenzDatum": 2017-07-02},... }, ...]}
dann die Schleife über den HTML-Ausgabe zu erzeugen.
Gibt es einen einfachen Weg, dies zu erreichen? Ich habe versucht, den alten Eintrag in das neue Array zu verschieben, wenn sich das ändert, aber das hat nicht funktioniert, weil Referenzen kopiert wurden. dann habe ich den folgenden Code versucht, aber es funktioniert nicht mehr als 2 verschiedene Monate und der Code sieht einfach schrecklich aus.
var oldDate: string;
var newDate: string;
sortedLogLine.entries = [];
this.sortedLog = [];
for (var i = 0; i < entries.length; i++) {
newDate = entries[i].referenceDate.substring(0, 7).split('-').reverse().join('.');
if (oldDate == newDate) {
sortedLogLine.entries.push(entries[i]);
}
if (!oldDate) {
sortedLogLine.entries.push(entries[i]);
sortedLogLine.monthYear = newDate;
oldDate = newDate;
}
if (oldDate != newDate) {
pushSortedLogLine.entries = sortedLogLine.entries.slice(0);
pushSortedLogLine.monthYear = oldDate;
this.sortedLog.push(pushSortedLogLine);
sortedLogLine.entries = [];
sortedLogLine.entries.push(entries[i]);
sortedLogLine.monthYear = newDate;
oldDate = newDate;
}
}
this.sortedLog.push(sortedLogLine);
Irgendwelche Vorschläge, wie man das effizienter macht?
hast du versucht [Underscore GroupBy] (http://underscorejs.org/#groupBy)? –