diff --git a/packages/grafana-data/src/field/fieldComparers.ts b/packages/grafana-data/src/field/fieldComparers.ts index bdcf8eb32a5..94bb4312b14 100644 --- a/packages/grafana-data/src/field/fieldComparers.ts +++ b/packages/grafana-data/src/field/fieldComparers.ts @@ -51,11 +51,16 @@ const numericComparer = (a: number, b: number): number => { return a - b; }; +// Using the Intl.Collator object compare method results in much faster +// string sorting than .localeCompare +const compare = new Intl.Collator('en', { sensitivity: 'base' }).compare; + const stringComparer = (a: string, b: string): number => { if (!a || !b) { return falsyComparer(a, b); } - return a.localeCompare(b); + + return compare(String(a), String(b)); }; const booleanComparer = (a: boolean, b: boolean): number => { diff --git a/packages/grafana-data/src/transformations/transformers/groupingToMatrix.test.ts b/packages/grafana-data/src/transformations/transformers/groupingToMatrix.test.ts index debc814c89e..cba642d8340 100644 --- a/packages/grafana-data/src/transformations/transformers/groupingToMatrix.test.ts +++ b/packages/grafana-data/src/transformations/transformers/groupingToMatrix.test.ts @@ -31,7 +31,7 @@ describe('Grouping to Matrix', () => { const expected: Field[] = [ { name: 'Time\\Time', - type: FieldType.string, + type: FieldType.time, values: [1000, 1001, 1002], config: {}, }, @@ -133,7 +133,7 @@ describe('Grouping to Matrix', () => { const expected: Field[] = [ { name: 'Time\\Time', - type: FieldType.string, + type: FieldType.time, values: [1000, 1001], config: {}, }, diff --git a/packages/grafana-data/src/transformations/transformers/groupingToMatrix.ts b/packages/grafana-data/src/transformations/transformers/groupingToMatrix.ts index 94ce41f79e2..d3b04d281ca 100644 --- a/packages/grafana-data/src/transformations/transformers/groupingToMatrix.ts +++ b/packages/grafana-data/src/transformations/transformers/groupingToMatrix.ts @@ -1,7 +1,7 @@ import { map } from 'rxjs/operators'; import { getFieldDisplayName } from '../../field/fieldState'; -import { DataFrame, Field, FieldType } from '../../types/dataFrame'; +import { DataFrame, Field } from '../../types/dataFrame'; import { SpecialValue, DataTransformerInfo, @@ -106,7 +106,7 @@ export const groupingToMatrixTransformer: DataTransformerInfo(values: T[]): T[] { - const unique = new Set(); - - for (let index = 0; index < values.length; index++) { - unique.add(values[index]); - } - + const unique = new Set(values); return Array.from(unique); }