Вы можете создать пользовательский канал для группировки по дате, используя метод redu () .
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({name: 'groupByDate'})
export class GroupByDate implements PipeTransform {
transform(array) {
let result = clasesDB.reduce((acc, curr) => {
let item = acc.find(item => item.date === curr.horaApertura);
if (item) {
item.events.push(curr);
} else {
acc.push({
"date": curr.horaApertura,
"events": [curr]
});
}
return acc;
}, []);
return result;
}
}
Включить этот канал как объявление в модуль.
И используйте его в своем шаблоне, как показано ниже:
<div *ngFor="let item of classesDB | groupByDate">
<div>{{ item.date }}</div>
<div *ngFor="let event of item.events>{{ event }}</div>
</div>
Живой пример группировки по дате:
var clasesDB = [{ "estado": true, "_id": "5d9a90b21c9d440000c41909", "horaApertura": "2019-10-18T13:00:00.363Z", "horaCierre": "2019-10-18T14:00:00.363Z",
}, { "estado": true, "_id": "5d9adca55d091800171a7e27", "horaApertura": "2019-10-18T18:00:00.363Z", "horaCierre": "2019-10-18T19:00:00.363Z",
}, { "estado": true, "_id": "5d9adc9b5d091800171a7e26", "horaApertura": "2019-10-19T19:00:00.363Z", "horaCierre": "2019-10-19T20:00:00.363Z",
},
{ "estado": true, "_id": "5d9adc9b5d091800171a7e28", "horaApertura": "2019-10-19T19:00:00.363Z", "horaCierre": "2019-10-19T20:00:00.363Z",
} ];
let result = clasesDB.reduce((acc, curr) => {
let item = acc.find(item => item.date === curr.horaApertura);
if (item) {
item.events.push(curr);
} else {
acc.push({
"date": curr.horaApertura,
"events": [curr]
});
}
return acc;
}, []);
console.log(result);