Skip to content

Commit 45d634a

Browse files
committed
feat(minimum): implement minimum functions
1 parent 18fca6f commit 45d634a

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

index.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,34 @@ function internalMaximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | nu
214214
return result;
215215
}
216216

217+
export function minimum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;
218+
export function minimum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;
219+
export function minimum<T>(array: ArrayLike<T>, compare: Comparator<any> = defaultCompare): T | null {
220+
return internalMinimum(array, compare);
221+
}
222+
223+
export function minimumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;
224+
export function minimumFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T | null;
225+
export function minimumFn<T>(compare: Comparator<any> = defaultCompare): (array: ArrayLike<T>) => T | null {
226+
return array => internalMinimum(array, compare);
227+
}
228+
229+
function internalMinimum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null {
230+
if (array.length === 0) {
231+
return null;
232+
}
233+
234+
let result = array[0];
235+
236+
for (let i = 1; i < array.length; ++i) {
237+
if (compare(array[i], result) < 0) {
238+
result = array[i];
239+
}
240+
}
241+
242+
return result;
243+
}
244+
217245
export function keyBy<T>(array: ArrayLike<T>,
218246
f: (element: T) => string): Dictionary<T[]> {
219247
const dictionary = {} as Dictionary<T[]>;

0 commit comments

Comments
 (0)