Skip to content

Commit f75f89e

Browse files
committed
feat(findLast): add findLast function
1 parent 6013891 commit f75f89e

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

index.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
filterFirst,
1818
find,
1919
findIndex,
20+
findLast,
2021
findLastIndex,
2122
first,
2223
fold,
@@ -300,6 +301,13 @@ test("find", t => {
300301
);
301302
});
302303

304+
test("findLast", t => {
305+
t.is(
306+
findLast([1, 2, 3, 4, 5, 2, 1], n => n >= 3),
307+
5
308+
);
309+
});
310+
303311
test("maximum", t => {
304312
t.is(maximum([1, 2, 3]), 3);
305313
t.is(maximum([1, 2, 3, 4, 3, 2, 1]), 4);

index.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,39 @@ export function findFn<T>(
625625
return array => find(array, predicate);
626626
}
627627

628+
export function findLast<T, U extends T>(
629+
array: ArrayLike<T>,
630+
predicate: (element: T) => element is U
631+
): U | null;
632+
export function findLast<T>(
633+
array: ArrayLike<T>,
634+
predicate: (element: T, index: number) => boolean
635+
): T | null;
636+
export function findLast<T>(
637+
array: ArrayLike<T>,
638+
predicate: (element: T, index: number) => boolean
639+
): T | null {
640+
for (let i = array.length - 1; i >= 0; --i) {
641+
const element = array[i] as T;
642+
if (predicate(element, i)) {
643+
return element;
644+
}
645+
}
646+
return null;
647+
}
648+
649+
export function findLastFn<T, U extends T>(
650+
predicate: (element: T) => element is U
651+
): (array: ArrayLike<T>) => U | null;
652+
export function findLastFn<T>(
653+
predicate: (element: T, index: number) => boolean
654+
): (array: ArrayLike<T>) => T | null;
655+
export function findLastFn<T>(
656+
predicate: (element: T, index: number) => boolean
657+
): (array: ArrayLike<T>) => T | null {
658+
return array => findLast(array, predicate);
659+
}
660+
628661
export function maximum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;
629662
export function maximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;
630663
export function maximum<T>(array: ArrayLike<T>, compare?: Comparator<T>): T | null {

0 commit comments

Comments
 (0)