keepWhen

keepWhen

  • (predicate: Predicate) => (collection: Collection) => Collection
  1. Keep entries that pass a condition

    const gt2 = n => n > 2
    const keepWhenGt2 = keepWhen(gt2)
    
    const result1 = keepWhenGt2([1, 2, 3, 4]) // is [3, 4]
    console.log(result1)
    
    const result2 = keepWhenGt2({ a: 1, b: 2, c: 3, d: 4 })
    console.log(result2)
    // is { c: 3, d: 4 }
    const gt2 = (n: number) => n > 2
    const keepWhenGt2 = keepWhen(gt2)
    
    const result1 = keepWhenGt2([1, 2, 3, 4]) // is [3, 4]
    console.log(result1)
    
    const result2 = keepWhenGt2({ a: 1, b: 2, c: 3, d: 4 })
    console.log(result2)
    // is { c: 3, d: 4 }
    
    const gt2 = n => n > 2
    const keepWhenGt2 = keepWhen(gt2)
    
    const result1 = keepWhenGt2([1, 2, 3, 4]) // is [3, 4]
    console.log(result1)
    
    const result2 = keepWhenGt2({
      a: 1,
      b: 2,
      c: 3,
      d: 4,
    })
    console.log(result2)
    // is { c: 3, d: 4 }
    const gt2 = (n: number) => n > 2
    const keepWhenGt2 = keepWhen(gt2)
    
    const result1 = keepWhenGt2([1, 2, 3, 4]) // is [3, 4]
    console.log(result1)
    
    const result2 = keepWhenGt2({
      a: 1,
      b: 2,
      c: 3,
      d: 4,
    })
    console.log(result2)
    // is { c: 3, d: 4 }
    
  2. Sometimes we want to keep entries that pass a condition. Below, we have some 100-meter times. People who ran it in under 13 minutes qualify for the next round. Let's list the qualified runners.

    const oneHundredMeterTimes = {
      mary: 12.8,
      sarah: 11.2,
      matt: 13.5,
    }
    
    const isSub13m = time => time < 13
    const keepSub13Times = keepWhen(isSub13m)
    
    const getQualifiedRunners = compose([keepSub13Times, Object.keys])
    
    const qualified = getQualifiedRunners(oneHundredMeterTimes)
    console.log(qualified)
    // is [
    //   mary
    //   sarah
    // ]
    type Times = Record<string, number>
    const oneHundredMeterTimes: Times = {
      mary: 12.8,
      sarah: 11.2,
      matt: 13.5,
    }
    
    const isSub13m = (time: number) => time < 13
    const keepSub13Times = keepWhen(isSub13m)<Times>
    
    const getQualifiedRunners = compose([keepSub13Times, Object.keys])
    
    const qualifiedRunners = getQualifiedRunners(oneHundredMeterTimes)
    console.log(qualifiedRunners)
    // is [
    //   mary
    //   sarah
    // ]
    
    const oneHundredMeterTimes = {
      mary: 12.8,
      sarah: 11.2,
      matt: 13.5,
    }
    
    const isSub13m = time => time < 13
    const keepSub13Times = keepWhen(isSub13m)
    
    const getQualifiedRunners = compose([
      keepSub13Times,
      Object.keys,
    ])
    
    const qualified = getQualifiedRunners(
      oneHundredMeterTimes
    )
    console.log(qualified)
    // is [
    //   mary
    //   sarah
    // ]
    type Times = Record<string, number>
    const oneHundredMeterTimes: Times = {
      mary: 12.8,
      sarah: 11.2,
      matt: 13.5,
    }
    
    const isSub13m = (time: number) => time < 13
    const keepSub13Times = keepWhen(isSub13m)<Times>
    
    const getQualifiedRunners = compose([
      keepSub13Times,
      Object.keys,
    ])
    
    const qualifiedRunners = getQualifiedRunners(
      oneHundredMeterTimes
    )
    console.log(qualifiedRunners)
    // is [
    //   mary
    //   sarah
    // ]