mDiscardFirstWhile

mDiscardFirstWhile

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

    Consider discardFirstWhile instead.
    This is for the uncommon case where mutating anArray is required.

    const lt3 = n => n < 3
    const mDiscardFirstWhileLt3 = mDiscardFirstWhile(lt3)
    
    const arr = [1, 2, 3, 4]
    const mutatedArr = mDiscardFirstWhileLt3(arr)
    console.log(mutatedArr === arr) // is true
    console.log(arr) // is [3, 4]
    const lt3 = (n: number) => n < 3
    const mDiscardFirstWhileLt3 = mDiscardFirstWhile(lt3)
    
    const arr = [1, 2, 3, 4]
    const mutatedArr = mDiscardFirstWhileLt3(arr)
    console.log(mutatedArr === arr) // is true
    console.log(arr) // is [3, 4]
    
    const lt3 = n => n < 3
    const mDiscardFirstWhileLt3 =
      mDiscardFirstWhile(lt3)
    
    const arr = [1, 2, 3, 4]
    const mutatedArr = mDiscardFirstWhileLt3(arr)
    console.log(mutatedArr === arr) // is true
    console.log(arr) // is [3, 4]
    const lt3 = (n: number) => n < 3
    const mDiscardFirstWhileLt3 =
      mDiscardFirstWhile(lt3)
    
    const arr = [1, 2, 3, 4]
    const mutatedArr = mDiscardFirstWhileLt3(arr)
    console.log(mutatedArr === arr) // is true
    console.log(arr) // is [3, 4]
    
  2. This is useful when we have sorted data and don't need to filter over all of it. Below, we want to remove bots from our online game. We assign a "human score" to each character every night. With the sorted character list, let's remove those with a low score.

    const characters = [
      { name: 'FireDragon', humanScore: 0 },
      { name: 'YouDontGnome', humanScore: 5 },
      { name: 'HeadlessNick', humanScore: 20 },
    ]
    
    const isBot = ({ humanScore }) => humanScore < 10
    const removeBots = mDiscardFirstWhile(isBot)
    removeBots(characters)
    console.log(characters)
    // is [
    //   { name: HeadlessNick, humanScore: 20 }
    // ]
    type Character = {
      name: string
      humanScore: number
    }
    
    const characters: Character[] = [
      { name: 'FireDragon', humanScore: 0 },
      { name: 'YouDontGnome', humanScore: 5 },
      { name: 'HeadlessNick', humanScore: 20 },
    ]
    
    const isBot = ({ humanScore }: Character) => humanScore < 10
    const removeBots = mDiscardFirstWhile(isBot)
    removeBots(characters)
    console.log(characters)
    // is [
    //   { name: HeadlessNick, humanScore: 20 }
    // ]
    
    const characters = [
      { name: 'FireDragon', humanScore: 0 },
      { name: 'YouDontGnome', humanScore: 5 },
      { name: 'HeadlessNick', humanScore: 20 },
    ]
    
    const isBot = ({ humanScore }) => humanScore < 10
    const removeBots = mDiscardFirstWhile(isBot)
    removeBots(characters)
    console.log(characters)
    // is [
    //   { name: HeadlessNick, humanScore: 20 }
    // ]
    type Character = {
      name: string
      humanScore: number
    }
    
    const characters: Character[] = [
      { name: 'FireDragon', humanScore: 0 },
      { name: 'YouDontGnome', humanScore: 5 },
      { name: 'HeadlessNick', humanScore: 20 },
    ]
    
    const isBot = ({ humanScore }: Character) =>
      humanScore < 10
    const removeBots = mDiscardFirstWhile(isBot)
    removeBots(characters)
    console.log(characters)
    // is [
    //   { name: HeadlessNick, humanScore: 20 }
    // ]