-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathColumnType.ts
46 lines (38 loc) · 1.2 KB
/
ColumnType.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
export type ColumnTypeKeys = 'number' | 'label' | 'categorical' | 'excel';
export type ColumnTypeValues = 'Number' | 'Label' | 'Categorical' | 'Excel';
export const ColumnTypeMap: { [K in ColumnTypeKeys]: ColumnTypeValues } = {
number: 'Number',
label: 'Label',
categorical: 'Categorical',
excel: 'Excel'
};
export const ReverseColumnTypeMap: { [K in ColumnTypeValues]: ColumnTypeKeys } =
{
Number: 'number',
Label: 'label',
Categorical: 'categorical',
Excel: 'excel'
};
export type ColumnMap = { [key: string]: ColumnTypeValues };
export function getColumnType(arr: any[]): ColumnTypeValues {
if (isNumericArray(arr)) {
return 'Number';
}
if (isExcelArray(arr)) {
return 'Excel';
}
if (isCategoricalArray(arr)) {
return 'Categorical';
}
return 'Label';
}
function isExcelArray(arr: any[]): boolean {
return arr.every((val: any) => typeof val == 'object');
}
export function isNumericArray(arr: any[]) {
return arr.every((val: any) => typeof val == 'number');
}
function isCategoricalArray(arr: any[]) {
let uniqueVals = [...new Set(arr)];
return uniqueVals.length > 1 && uniqueVals.length < 5;
}