#angular #typescript
Вопрос:
У меня есть 2 массива различных объектов, которые я хотел бы отсортировать по дате в моем приложении Angular.
Объект 1:
Идентификатор назначения: номер, Дата назначения: Дата
Объект 2:
Идентификатор отмены: номер, Дата отмены: Дата
Следующий код сортируется по дате встречи, как я могу одновременно сортировать данные об отмене, чтобы у меня был объединенный отсортированный список?
let appointments = this.appointmentService.getAppointmentsForJob(this.jobId);
let cancellations = this.cancellationService.getCancellationsForJob(this.jobId);
forkJoin([appointments, cancellations]).subscribe(results => {
this.appointments = results[0];
this.cancellations = results[1];
this.loading = false;
this.combinedItems = ([]).concat(this.appointments, this.cancellations);
this.combinedItems = this.combinedItems.sort((a, b) => a.appointmentDate - b.appointmentDate);
console.log(this.combinedItems);
});
Ответ №1:
Вы должны знать, какое свойство имеет «более высокий» приоритет при сортировке, я поставил его в том порядке, который вы указали. Сначала назначьте дату, затем отмените.
forkJoin([appointments, cancellations]).subscribe(results => {
[this.appointments, this.cancellations] = results;
this.loading = false;
this.combinedItems = [...this.appointments, ...this.cancellations];
const compareFn = (a: any, b: any) => {
const compareByAppDate = a.appointmentDate - b.appointmentDate;
const compareByCancelDate = a.cancelDate - b.cancelDate;
return compareByAppDate || compareByCancelDate;
}
this.combinedItems = this.combinedItems.sort(compareFn)
console.log(this.combinedItems);
});
Ответ №2:
если вы хотите использовать обе даты одновременно, вы можете изменить функцию сортировки следующим образом:
this.combinedItems = this.combinedItems.sort((a, b) => {
const dateA = a.appointmentDate || a.cancelDate;
const dateB = b.appointmentDate || b.cancelDate;
return dateA - dateB
});