import { getTime } from "../datetime"; class Sort implements ISort { emptyValue = "1/1/1970"; dates(a: string, b: string): number { const value1 = getTime(a || this.emptyValue); const value2 = getTime(b || this.emptyValue); return value1 - value2; } numbers(a?: string | number | null, b?: string | number | null): number { return Number(a || 0) - Number(b || 0); } stringsNumeric(a?: string | null, b?: string | null): number { if (!a && !b) return 0; if (!a) return -1; if (!b) return 1; return a.localeCompare(b, undefined, { numeric: true }); } strings(a?: string, b?: string): number { if ((a || "").toLowerCase() > (b || "").toLowerCase()) return 1; if ((a || "").toLowerCase() < (b || "").toLowerCase()) return -1; return 0; } numbersWithSymbols(a?: string, b?: string): number { const value1 = Number((a || "0").match(/^\d+/g)?.[0] || 0); const value2 = Number((b || "0").match(/^\d+/g)?.[0] || 0); return value2 - value1; } } export const sort = new Sort(); interface ISort { strings(): number; numbers(a?: string | number | null, b?: string | number | null): number; dates(a: string, b: string): number; }