/** * Sortiert ein Array von Objekten anhand einer Spalte. * * @param data Array von Objekten * @param column Sortierspalte (Property-Name im Objekt) * @param ascending true = aufsteigend, false = absteigend */ export function sortData>( data: T[], column?: keyof T | null, ascending: boolean = true ): T[] { if (!column) return data return [...data].sort((a, b) => { const valA = a[column] const valB = b[column] // null/undefined nach hinten if (valA == null && valB != null) return 1 if (valB == null && valA != null) return -1 if (valA == null && valB == null) return 0 // Zahlenvergleich if (typeof valA === "number" && typeof valB === "number") { return ascending ? valA - valB : valB - valA } // Datumsvergleich // @ts-ignore if (valA instanceof Date && valB instanceof Date) { return ascending ? valA.getTime() - valB.getTime() : valB.getTime() - valA.getTime() } // Fallback: Stringvergleich return ascending ? String(valA).localeCompare(String(valB)) : String(valB).localeCompare(String(valA)) }) }