@@ -9,6 +9,10 @@ export const copy: <T>(array: ArrayLike<T>) => T[] =
9
9
? Array . from // tslint:disable-line:no-unbound-method
10
10
: array => nativeSlice . call ( array ) ;
11
11
12
+ export function copyFn ( ) : typeof copy {
13
+ return copy ;
14
+ }
15
+
12
16
// tslint:disable-next-line:no-unbound-method
13
17
const nativeMap = Array . prototype . map ;
14
18
@@ -18,6 +22,10 @@ export const map: <T, U>(array: ArrayLike<T>, f: (element: T, index: number) =>
18
22
? Array . from as any // TypeScript 3.2 incorrectly requires this cast to any.
19
23
: ( array , f ) => nativeMap . call ( array , f ) ;
20
24
25
+ export function mapFn < T , U > ( f : ( element : T , index : number ) => U ) : ( array : ArrayLike < T > ) => U [ ] {
26
+ return array => map ( array , f ) ;
27
+ }
28
+
21
29
export function reverse < T > ( array : ArrayLike < T > ) : T [ ] {
22
30
const result = copy < T > ( { length : array . length } ) ;
23
31
for ( let i = 0 ; i < array . length ; ++ i ) {
@@ -26,6 +34,10 @@ export function reverse<T>(array: ArrayLike<T>): T[] {
26
34
return result ;
27
35
}
28
36
37
+ export function reverseFn ( ) : typeof reverse {
38
+ return reverse ;
39
+ }
40
+
29
41
export function groupBy < TElement > ( array : ReadonlyArray < TElement > ,
30
42
keyOf : ( element : TElement ) => string ) : Dictionary < TElement [ ] > {
31
43
const grouped = { } as Dictionary < TElement [ ] > ;
@@ -40,6 +52,10 @@ export function groupBy<TElement>(array: ReadonlyArray<TElement>,
40
52
return grouped ;
41
53
}
42
54
55
+ export function groupByFn < T > ( keyOf : ( element : T ) => string ) : ( array : ReadonlyArray < T > ) => Dictionary < T [ ] > {
56
+ return array => groupBy ( array , keyOf ) ;
57
+ }
58
+
43
59
export function last < T > ( array : ArrayLike < T > ) : T {
44
60
if ( array . length > 0 ) {
45
61
return array [ array . length - 1 ] ;
@@ -48,11 +64,19 @@ export function last<T>(array: ArrayLike<T>): T {
48
64
}
49
65
}
50
66
67
+ export function lastFn ( ) : typeof last {
68
+ return last ;
69
+ }
70
+
51
71
export function concatMap < T , U > ( array : ArrayLike < T > , f : ( element : T ) => U [ ] ) : U [ ] {
52
72
return map ( array , f )
53
73
. reduce ( ( result , subarray ) => result . concat ( subarray ) , [ ] ) ;
54
74
}
55
75
76
+ export function concatMapFn < T , U > ( f : ( element : T ) => U [ ] ) : ( array : ArrayLike < T > ) => U [ ] {
77
+ return array => concatMap ( array , f ) ;
78
+ }
79
+
56
80
export function group < T > ( elements : ReadonlyArray < T > , compare : Comparator < T > ) : T [ ] [ ] {
57
81
return copy ( elements )
58
82
. sort ( compare )
@@ -73,7 +97,15 @@ export function group<T>(elements: ReadonlyArray<T>, compare: Comparator<T>): T[
73
97
} , [ ] as T [ ] [ ] ) ;
74
98
}
75
99
100
+ export function groupFn < T > ( compare : Comparator < T > ) : ( array : ReadonlyArray < T > ) => T [ ] [ ] {
101
+ return array => group ( array , compare ) ;
102
+ }
103
+
76
104
export function sum < T > ( array : ArrayLike < T > , value : ( element : T ) => number ) : number {
77
105
return map ( array , value )
78
106
. reduce ( ( sum , value ) => sum + value , 0 ) ;
79
107
}
108
+
109
+ export function sumFn < T > ( value : ( element : T ) => number ) : ( array : ReadonlyArray < T > ) => number {
110
+ return array => sum ( array , value ) ;
111
+ }
0 commit comments