Skip to content

Commit 91330aa

Browse files
committed
add elementSelector to groupBy / groupToObject
1 parent 6ae63ae commit 91330aa

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

Signum.React/Scripts/Globals.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ declare global {
2323

2424
interface Array<T> {
2525
groupBy<K extends string | number>(this: Array<T>, keySelector: (element: T) => K): { key: K; elements: T[] }[];
26+
groupBy<K extends string | number, E>(this: Array<T>, keySelector: (element: T) => K, elementSelector: (element: T) => E): { key: K; elements: E[] }[];
2627
groupToObject(this: Array<T>, keySelector: (element: T) => string): { [key: string]: T[] };
28+
groupToObject<E>(this: Array<T>, keySelector: (element: T) => string, elementSelector: (element: T) => E): { [key: string]: E[] };
2729
groupWhen(this: Array<T>, condition: (element: T) => boolean, includeKeyInGroup?: boolean, initialGroup?: boolean): { key: T, elements: T[] }[];
2830
groupWhenChange<K extends string | number>(this: Array<T>, keySelector: (element: T) => K): { key: K, elements: T[] }[];
2931

@@ -137,25 +139,25 @@ Array.prototype.clear = function (): void {
137139
this.length = 0;
138140
};
139141

140-
Array.prototype.groupBy = function (this: any[], keySelector: (element: any) => string | number): { key: any /*string*/; elements: any[] }[] {
142+
Array.prototype.groupBy = function (this: any[], keySelector: (element: any) => string | number, elementSelector?: (element: any) => unknown): { key: any /*string*/; elements: any[] }[] {
141143
const result: { key: string | number; elements: any[] }[] = [];
142-
const objectGrouped = this.groupToObject(keySelector as ((element: any) => string));
144+
const objectGrouped = this.groupToObject(keySelector as ((element: any) => string), elementSelector!);
143145
for (const prop in objectGrouped) {
144146
if (objectGrouped.hasOwnProperty(prop))
145147
result.push({ key: prop, elements: objectGrouped[prop] });
146148
}
147149
return result;
148150
};
149151

150-
Array.prototype.groupToObject = function (this: any[], keySelector: (element: any) => string): { [key: string]: any[] } {
152+
Array.prototype.groupToObject = function (this: any[], keySelector: (element: any) => string, elementSelector?: (element: any) => unknown): { [key: string]: any[] } {
151153
const result: { [key: string]: any[] } = {};
152154

153155
for (let i = 0; i < this.length; i++) {
154156
const element: any = this[i];
155157
const key = keySelector(element);
156158
if (!result[key])
157159
result[key] = [];
158-
result[key].push(element);
160+
result[key].push(elementSelector ? elementSelector(element) : element);
159161
}
160162
return result;
161163
};

0 commit comments

Comments
 (0)