Skip to content

Commit e04566b

Browse files
committed
feat(findLast): add findLast function
(cherry picked from commit f75f89e)
1 parent 7114bfa commit e04566b

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,
@@ -299,6 +300,13 @@ test("find", t => {
299300
);
300301
});
301302

303+
test("findLast", t => {
304+
t.is(
305+
findLast([1, 2, 3, 4, 5, 2, 1], n => n >= 3),
306+
5
307+
);
308+
});
309+
302310
test("maximum", t => {
303311
t.is(maximum([1, 2, 3]), 3);
304312
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];
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)