@@ -23,7 +23,9 @@ declare global {
23
23
24
24
interface Array < T > {
25
25
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 [ ] } [ ] ;
26
27
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 [ ] } ;
27
29
groupWhen ( this : Array < T > , condition : ( element : T ) => boolean , includeKeyInGroup ?: boolean , initialGroup ?: boolean ) : { key : T , elements : T [ ] } [ ] ;
28
30
groupWhenChange < K extends string | number > ( this : Array < T > , keySelector : ( element : T ) => K ) : { key : K , elements : T [ ] } [ ] ;
29
31
@@ -137,25 +139,25 @@ Array.prototype.clear = function (): void {
137
139
this . length = 0 ;
138
140
} ;
139
141
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 [ ] } [ ] {
141
143
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 ! ) ;
143
145
for ( const prop in objectGrouped ) {
144
146
if ( objectGrouped . hasOwnProperty ( prop ) )
145
147
result . push ( { key : prop , elements : objectGrouped [ prop ] } ) ;
146
148
}
147
149
return result ;
148
150
} ;
149
151
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 [ ] } {
151
153
const result : { [ key : string ] : any [ ] } = { } ;
152
154
153
155
for ( let i = 0 ; i < this . length ; i ++ ) {
154
156
const element : any = this [ i ] ;
155
157
const key = keySelector ( element ) ;
156
158
if ( ! result [ key ] )
157
159
result [ key ] = [ ] ;
158
- result [ key ] . push ( element ) ;
160
+ result [ key ] . push ( elementSelector ? elementSelector ( element ) : element ) ;
159
161
}
160
162
return result ;
161
163
} ;
0 commit comments