JavaScript
const lastIndex = (arr, predicate) => arr.reduce((prev, curr, index) => (predicate(curr) ? index : prev), -1)
const lastIndex = (arr, predicate) => arr.map((item) => predicate(item)).lastIndexOf(true)
TypeScript
const lastIndex = <T,_>(arr: T[], predicate: (a: T) => boolean): number => arr.reduce((prev, curr, index) => (predicate(curr) ? index : prev), -1)
const lastIndex = <T,_>(arr: T[], predicate: (a: T) => boolean): number => arr.map((item) => predicate(item)).lastIndexOf(true)
Examples
lastIndex([1, 3, 5, 7, 9, 2, 4, 6, 8], (i) => i % 2 === 1)
lastIndex([1, 3, 5, 7, 9, 8, 6, 4, 2], (i) => i > 6)