discardLastWhile

discardLastWhile

  • (predicate: Predicate) => (anArray: array) => array
  1. Discard last elements that pass a condition

    const gt2 = n => n > 2
    const discardLastWhileGt2 = discardLastWhile(gt2)
    
    discardLastWhileGt2([1, 2, 3, 4]) // is [1, 2]
    discardLastWhileGt2([3, 4, 1]) // is [3, 4, 1]
    const gt2 = (n: number) => n > 2
    const discardLastWhileGt2 = discardLastWhile(gt2)<number[]>
    
    discardLastWhileGt2([1, 2, 3, 4]) // is [1, 2]
    discardLastWhileGt2([3, 4, 1]) // is [3, 4, 1]
    
    const gt2 = n => n > 2
    const discardLastWhileGt2 = discardLastWhile(gt2)
    
    discardLastWhileGt2([1, 2, 3, 4]) // is [1, 2]
    discardLastWhileGt2([3, 4, 1]) // is [3, 4, 1]
    const gt2 = (n: number) => n > 2
    const discardLastWhileGt2 = discardLastWhile(gt2)<
      number[]
    >
    
    discardLastWhileGt2([1, 2, 3, 4]) // is [1, 2]
    discardLastWhileGt2([3, 4, 1]) // is [3, 4, 1]
    
  2. This is useful when we have sorted data and don't need to filter over all of it. Below, we have a list of online players sorted by gold. Players with over 1,000 gold are obviously cheaters, so let's remove them.

    const players = [
      { name: 'meg', gold: 80 },
      { name: 'tom', gold: 120 },
      { name: 'ken', gold: 9001 },
      { name: 'chris', gold: 9999 },
    ]
    
    const discardCheaters = discardLastWhile(({ gold }) => gold > 1000)
    const updatedPlayers = discardCheaters(players)
    console.log(updatedPlayers)
    // is [
    //   { name: meg, gold: 80 }
    //   { name: tom, gold: 120 }
    // ]
    type Player = { name: string; gold: number }
    
    const players = [
      { name: 'meg', gold: 80 },
      { name: 'tom', gold: 120 },
      { name: 'ken', gold: 9001 },
      { name: 'chris', gold: 9999 },
    ]
    
    const discardCheaters = discardLastWhile(({ gold }: Player) => gold > 1000)<
      Player[]
    >
    const updatedPlayers = discardCheaters(players)
    console.log(updatedPlayers)
    // is [
    //   { name: meg, gold: 80 }
    //   { name: tom, gold: 120 }
    // ]
    
    const players = [
      { name: 'meg', gold: 80 },
      { name: 'tom', gold: 120 },
      { name: 'ken', gold: 9001 },
      { name: 'chris', gold: 9999 },
    ]
    
    const discardCheaters = discardLastWhile(
      ({ gold }) => gold > 1000
    )
    const updatedPlayers = discardCheaters(players)
    console.log(updatedPlayers)
    // is [
    //   { name: meg, gold: 80 }
    //   { name: tom, gold: 120 }
    // ]
    type Player = { name: string; gold: number }
    
    const players = [
      { name: 'meg', gold: 80 },
      { name: 'tom', gold: 120 },
      { name: 'ken', gold: 9001 },
      { name: 'chris', gold: 9999 },
    ]
    
    const discardCheaters = discardLastWhile(
      ({ gold }: Player) => gold > 1000
    )<Player[]>
    const updatedPlayers = discardCheaters(players)
    console.log(updatedPlayers)
    // is [
    //   { name: meg, gold: 80 }
    //   { name: tom, gold: 120 }
    // ]