keepLastWhile
keepLastWhile
(predicate: Predicate) => (anArray: array) => array
Keep the last elements that pass a condition
const keepLastWhileGt1 = keepLastWhile(n => n > 1) keepLastWhileGt1([1, 2, 3]) // is [2, 3] keepLastWhileGt1([2, 3, 1]) // is []
const keepLastWhileGt1 = keepLastWhile((n: number) => n > 1) keepLastWhileGt1([1, 2, 3]) // is [2, 3] keepLastWhileGt1([2, 3, 1]) // is []
const keepLastWhileGt1 = keepLastWhile(n => n > 1) keepLastWhileGt1([1, 2, 3]) // is [2, 3] keepLastWhileGt1([2, 3, 1]) // is []
const keepLastWhileGt1 = keepLastWhile( (n: number) => n > 1 ) keepLastWhileGt1([1, 2, 3]) // is [2, 3] keepLastWhileGt1([2, 3, 1]) // is []
Sometimes we have ordered data and only care about the last elements. Below, we are running a streaming service and have added a few new cooking shows. We only renew shows with at least a thousand views, so let's list the ones we need to cancel.
const shows = [ { name: "Cake'n'Bake", views: 2047 }, { name: "Greg's Grills", views: 688 }, { name: "Let's Brunch", views: 512 }, ] const shouldCancel = ({ views }) => views < 1000 const getCanceledShows = compose([ keepLastWhile(shouldCancel), mapValues(get('name')), ]) const canceledShows = getCanceledShows(shows) console.log(canceledShows) // is [ // Greg's Grills // Let's Brunch // ]
type Show = { name: string views: number } const shows: Show[] = [ { name: "Cake'n'Bake", views: 2047 }, { name: "Greg's Grills", views: 688 }, { name: "Let's Brunch", views: 512 }, ] const shouldCancel = ({ views }: Show) => views < 1000 const getName = get('name')<Show> const getCanceledShows = compose([ keepLastWhile(shouldCancel)<Show[]>, mapValues(getName)<Show[]>, ]) const canceledShows = getCanceledShows(shows) console.log(canceledShows) // is [ // Greg's Grills // Let's Brunch // ]
const shows = [ { name: "Cake'n'Bake", views: 2047 }, { name: "Greg's Grills", views: 688 }, { name: "Let's Brunch", views: 512 }, ] const shouldCancel = ({ views }) => views < 1000 const getCanceledShows = compose([ keepLastWhile(shouldCancel), mapValues(get('name')), ]) const canceledShows = getCanceledShows(shows) console.log(canceledShows) // is [ // Greg's Grills // Let's Brunch // ]
type Show = { name: string views: number } const shows: Show[] = [ { name: "Cake'n'Bake", views: 2047 }, { name: "Greg's Grills", views: 688 }, { name: "Let's Brunch", views: 512 }, ] const shouldCancel = ({ views }: Show) => views < 1000 const getName = get('name')<Show> const getCanceledShows = compose([ keepLastWhile(shouldCancel)<Show[]>, mapValues(getName)<Show[]>, ]) const canceledShows = getCanceledShows(shows) console.log(canceledShows) // is [ // Greg's Grills // Let's Brunch // ]