forked from ddrilling/asb_cloud_front
34 lines
819 B
TypeScript
34 lines
819 B
TypeScript
|
export const makeNumericSorter = (key: string) => (a: any, b: any) => a[key] - b[key];
|
||
|
|
||
|
export const makeStringSorter = (key: string) => (a: any, b: any) => {
|
||
|
if (a == null && b == null)
|
||
|
return 1;
|
||
|
|
||
|
if (a == null)
|
||
|
return 1;
|
||
|
|
||
|
if (b == null)
|
||
|
return -1;
|
||
|
|
||
|
let aValue = a[key];
|
||
|
let bValue = b[key];
|
||
|
|
||
|
for (let i = 0; i < a.length; i++) {
|
||
|
if (isNaN(aValue.charCodeAt(i)) || (aValue.charCodeAt(i) > bValue.charCodeAt(i)))
|
||
|
return 1;
|
||
|
|
||
|
if (aValue.charCodeAt(i) > bValue.charCodeAt(i))
|
||
|
return -1;
|
||
|
}
|
||
|
return 0;
|
||
|
};
|
||
|
|
||
|
export const makeDateSorter = (key: string) => (a: any, b: any) => {
|
||
|
const date = new Date(a[key]);
|
||
|
|
||
|
if (Number.isNaN(date.getTime()))
|
||
|
throw new Error('Date column contains not date formatted string(s)');
|
||
|
|
||
|
return date.getTime() - new Date(b[key]).getTime();
|
||
|
};
|