Skip to content

Commit 656352a

Browse files
committed
feat(findLast): add findLast function
(cherry picked from commit f75f89e)
1 parent c69fe93 commit 656352a

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
@@ -605,6 +605,39 @@ export function findFn<T>(
605605
return array => find(array, predicate);
606606
}
607607

608+
export function findLast<T, U extends T>(
609+
array: ArrayLike<T>,
610+
predicate: (element: T) => element is U
611+
): U | null;
612+
export function findLast<T>(
613+
array: ArrayLike<T>,
614+
predicate: (element: T, index: number) => boolean
615+
): T | null;
616+
export function findLast<T>(
617+
array: ArrayLike<T>,
618+
predicate: (element: T, index: number) => boolean
619+
): T | null {
620+
for (let i = array.length - 1; i >= 0; --i) {
621+
const element = array[i];
622+
if (predicate(element, i)) {
623+
return element;
624+
}
625+
}
626+
return null;
627+
}
628+
629+
export function findLastFn<T, U extends T>(
630+
predicate: (element: T) => element is U
631+
): (array: ArrayLike<T>) => U | null;
632+
export function findLastFn<T>(
633+
predicate: (element: T, index: number) => boolean
634+
): (array: ArrayLike<T>) => T | null;
635+
export function findLastFn<T>(
636+
predicate: (element: T, index: number) => boolean
637+
): (array: ArrayLike<T>) => T | null {
638+
return array => findLast(array, predicate);
639+
}
640+
608641
export function maximum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;
609642
export function maximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;
610643
export function maximum<T>(

0 commit comments

Comments
 (0)