Skip to content

Commit afdc2d8

Browse files
committed
feat(findLastIndex): add findLastIndex function
1 parent 319dcfe commit afdc2d8

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-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+
findLastIndex,
2021
first,
2122
fold,
2223
fold1,
@@ -280,6 +281,13 @@ test("findIndex", t => {
280281
);
281282
});
282283

284+
test("findLastIndex", t => {
285+
t.is(
286+
findLastIndex([1, 2, 3, 4, 3, 2, 1], n => n >= 3),
287+
4
288+
);
289+
});
290+
283291
test("find", t => {
284292
t.is(
285293
find([1, 2, 3, 4, 3, 2, 1], n => n >= 3),

index.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,24 @@ export function findIndexFn<T>(
566566
return array => findIndex(array, predicate);
567567
}
568568

569+
export function findLastIndex<T>(
570+
array: ArrayLike<T>,
571+
predicate: (element: T, index: number) => boolean
572+
): number | null {
573+
for (let i = array.length - 1; i >= 0; --i) {
574+
if (predicate(array[i] as T, i)) {
575+
return i;
576+
}
577+
}
578+
return null;
579+
}
580+
581+
export function findLastIndexFn<T>(
582+
predicate: (element: T, index: number) => boolean
583+
): (array: ArrayLike<T>) => number | null {
584+
return array => findLastIndex(array, predicate);
585+
}
586+
569587
export function find<T, U extends T>(
570588
array: ArrayLike<T>,
571589
predicate: (element: T) => element is U

0 commit comments

Comments
 (0)