Changes
This commit is contained in:
39
src/utils/sort.ts
Normal file
39
src/utils/sort.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* 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<T extends Record<string, any>>(
|
||||
data: T[],
|
||||
column?: keyof T,
|
||||
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
|
||||
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))
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user