Skip to content

Commit 7d4d287

Browse files
committed
feat(findLast): add findLast function
(cherry picked from commit f75f89e)
1 parent 6f66fb4 commit 7d4d287

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
fold,
2223
fold1,
@@ -294,6 +295,13 @@ test("find", t => {
294295
);
295296
});
296297

298+
test("findLast", t => {
299+
t.is(
300+
findLast([1, 2, 3, 4, 5, 2, 1], n => n >= 3),
301+
5
302+
);
303+
});
304+
297305
test("maximum", t => {
298306
t.is(maximum([1, 2, 3]), 3);
299307
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
@@ -612,6 +612,39 @@ export function findFn<T>(
612612
return array => find(array, predicate);
613613
}
614614

615+
export function findLast<T, U extends T>(
616+
array: ArrayLike<T>,
617+
predicate: (element: T) => element is U
618+
): U | null;
619+
export function findLast<T>(
620+
array: ArrayLike<T>,
621+
predicate: (element: T, index: number) => boolean
622+
): T | null;
623+
export function findLast<T>(
624+
array: ArrayLike<T>,
625+
predicate: (element: T, index: number) => boolean
626+
): T | null {
627+
for (let i = array.length - 1; i >= 0; --i) {
628+
const element = array[i];
629+
if (predicate(element, i)) {
630+
return element;
631+
}
632+
}
633+
return null;
634+
}
635+
636+
export function findLastFn<T, U extends T>(
637+
predicate: (element: T) => element is U
638+
): (array: ArrayLike<T>) => U | null;
639+
export function findLastFn<T>(
640+
predicate: (element: T, index: number) => boolean
641+
): (array: ArrayLike<T>) => T | null;
642+
export function findLastFn<T>(
643+
predicate: (element: T, index: number) => boolean
644+
): (array: ArrayLike<T>) => T | null {
645+
return array => findLast(array, predicate);
646+
}
647+
615648
export function maximum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;
616649
export function maximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;
617650
export function maximum<T>(

0 commit comments

Comments
 (0)