discardRange

discardRange

  • (range: Range) => (sequence: Sequence) => Sequence
  1. Discard a range of indices

    Ranges in Common FP are inclusive

    const range = { startIdx: 1, endIdx: 2 }
    const discard2ndAnd3rd = discardRange(range)
    
    discard2ndAnd3rd(['a', 'b', 'c', 'd']) // is ['a', 'd']
    discard2ndAnd3rd('abcd') // is 'ad'
    discard2ndAnd3rd(['a', 'b']) // is ['a']
    const range = { startIdx: 1, endIdx: 2 }
    const discard2ndAnd3rd = discardRange(range)
    
    discard2ndAnd3rd(['a', 'b', 'c', 'd']) // is ['a', 'd']
    discard2ndAnd3rd('abcd') // is 'ad'
    discard2ndAnd3rd(['a', 'b']) // is ['a']
    
    const range = { startIdx: 1, endIdx: 2 }
    const discard2ndAnd3rd = discardRange(range)
    
    discard2ndAnd3rd(['a', 'b', 'c', 'd']) // is ['a', 'd']
    discard2ndAnd3rd('abcd') // is 'ad'
    discard2ndAnd3rd(['a', 'b']) // is ['a']
    const range = { startIdx: 1, endIdx: 2 }
    const discard2ndAnd3rd = discardRange(range)
    
    discard2ndAnd3rd(['a', 'b', 'c', 'd']) // is ['a', 'd']
    discard2ndAnd3rd('abcd') // is 'ad'
    discard2ndAnd3rd(['a', 'b']) // is ['a']
    
  2. Sometimes we want to remove a range of data. Below, we have three weeks of Liz's bowling scores. She can't make it Tuesdays and Wednesdays due to choir, so let's remove those.

    const scores = [
      ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'],
      [188, 0, 0, 202, 156],
      [172, 0, 0, 190, 185],
      [206, 0, 0, 167, 191],
    ]
    
    const tueAndWed = { startIdx: 1, endIdx: 2 }
    const discardAbsentScores = discardRange(tueAndWed)
    const discardAllAbsentScores = mapValues(discardAbsentScores)
    
    const updatedScores = discardAllAbsentScores(scores)
    console.log(updatedScores)
    // is [
    //  ['monday', 'thursday', 'friday'],
    //  [188, 202, 156],
    //  [172, 190, 185],
    //  [206, 167, 191],
    // ]
    type Scores = [string[], ...number[][]]
    const scores: Scores = [
      ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'],
      [188, 0, 0, 202, 156],
      [172, 0, 0, 190, 185],
      [206, 0, 0, 167, 191],
    ]
    
    const tueAndWed = { startIdx: 1, endIdx: 2 }
    const discardAbsentScores = discardRange(tueAndWed)<string[] | number[]>
    const discardAllAbsentScores = mapValues(discardAbsentScores)<Scores>
    
    const updatedScores = discardAllAbsentScores(scores) as Scores
    console.log(updatedScores)
    // is [
    //  ['monday', 'thursday', 'friday'],
    //  [188, 202, 156],
    //  [172, 190, 185],
    //  [206, 167, 191],
    // ]
    
    const scores = [
      [
        'monday',
        'tuesday',
        'wednesday',
        'thursday',
        'friday',
      ],
      [188, 0, 0, 202, 156],
      [172, 0, 0, 190, 185],
      [206, 0, 0, 167, 191],
    ]
    
    const tueAndWed = { startIdx: 1, endIdx: 2 }
    const discardAbsentScores =
      discardRange(tueAndWed)
    const discardAllAbsentScores = mapValues(
      discardAbsentScores
    )
    
    const updatedScores =
      discardAllAbsentScores(scores)
    console.log(updatedScores)
    // is [
    //  ['monday', 'thursday', 'friday'],
    //  [188, 202, 156],
    //  [172, 190, 185],
    //  [206, 167, 191],
    // ]
    type Scores = [string[], ...number[][]]
    const scores: Scores = [
      [
        'monday',
        'tuesday',
        'wednesday',
        'thursday',
        'friday',
      ],
      [188, 0, 0, 202, 156],
      [172, 0, 0, 190, 185],
      [206, 0, 0, 167, 191],
    ]
    
    const tueAndWed = { startIdx: 1, endIdx: 2 }
    const discardAbsentScores = discardRange(
      tueAndWed
    )<string[] | number[]>
    const discardAllAbsentScores = mapValues(
      discardAbsentScores
    )<Scores>
    
    const updatedScores = discardAllAbsentScores(
      scores
    ) as Scores
    console.log(updatedScores)
    // is [
    //  ['monday', 'thursday', 'friday'],
    //  [188, 202, 156],
    //  [172, 190, 185],
    //  [206, 167, 191],
    // ]