keepRange
keepRange
(range: Range) => (sequence: Sequence) => Sequence
Keep a range of indices
Ranges in Common FP are inclusive
const range = { startIdx: 1, endIdx: 2 } const keep2ndAnd3rd = keepRange(range) keep2ndAnd3rd(['a', 'b', 'c', 'd']) // is ['b', 'c'] keep2ndAnd3rd('abcd') // is 'bc' keep2ndAnd3rd(['a', 'b']) // is ['b']
const range = { startIdx: 1, endIdx: 2 } const keep2ndAnd3rd = keepRange(range) keep2ndAnd3rd(['a', 'b', 'c', 'd']) // is ['b', 'c'] keep2ndAnd3rd('abcd') // is 'bc' keep2ndAnd3rd(['a', 'b']) // is ['b']
const range = { startIdx: 1, endIdx: 2 } const keep2ndAnd3rd = keepRange(range) keep2ndAnd3rd(['a', 'b', 'c', 'd']) // is ['b', 'c'] keep2ndAnd3rd('abcd') // is 'bc' keep2ndAnd3rd(['a', 'b']) // is ['b']
const range = { startIdx: 1, endIdx: 2 } const keep2ndAnd3rd = keepRange(range) keep2ndAnd3rd(['a', 'b', 'c', 'd']) // is ['b', 'c'] keep2ndAnd3rd('abcd') // is 'bc' keep2ndAnd3rd(['a', 'b']) // is ['b']
Sometimes we have a range of data we're focused on. Below, Chris has been shooting ten free throws every day and recording how many he makes. He only does this at school, so there's no data for the weekends. Let's keep the weekday numbers and find his average.
const dailyFreeThrowsPerWeek = [ [0, 3, 6, 4, 5, 4, 0], [0, 6, 4, 8, 3, 5, 0], [0, 7, 5, 6, 8, 5, 0], ] const keepWeekdays = keepRange({ startIdx: 1, endIdx: 5 }) const getAverageFreeThrows = compose([ mapValues(keepWeekdays), flattenOnce, getAverageValue, roundToNearest('0.1'), ]) const averageFreeThrows = getAverageFreeThrows(dailyFreeThrowsPerWeek) console.log(averageFreeThrows) // is 5.3
const dailyFreeThrowsPerWeek = [ [0, 3, 6, 4, 5, 4, 0], [0, 6, 4, 8, 3, 5, 0], [0, 7, 5, 6, 8, 5, 0], ] const keepWeekdays = keepRange({ startIdx: 1, endIdx: 5 })<number[]> const getAverageFreeThrows = compose([ mapValues(keepWeekdays)<number[][]>, flattenOnce, getAverageValue, roundToNearest('0.1'), ]) const averageFreeThrows = getAverageFreeThrows(dailyFreeThrowsPerWeek) console.log(averageFreeThrows) // is 5.3
const dailyFreeThrowsPerWeek = [ [0, 3, 6, 4, 5, 4, 0], [0, 6, 4, 8, 3, 5, 0], [0, 7, 5, 6, 8, 5, 0], ] const keepWeekdays = keepRange({ startIdx: 1, endIdx: 5, }) const getAverageFreeThrows = compose([ mapValues(keepWeekdays), flattenOnce, getAverageValue, roundToNearest('0.1'), ]) const averageFreeThrows = getAverageFreeThrows( dailyFreeThrowsPerWeek ) console.log(averageFreeThrows) // is 5.3
const dailyFreeThrowsPerWeek = [ [0, 3, 6, 4, 5, 4, 0], [0, 6, 4, 8, 3, 5, 0], [0, 7, 5, 6, 8, 5, 0], ] const keepWeekdays = keepRange({ startIdx: 1, endIdx: 5, })<number[]> const getAverageFreeThrows = compose([ mapValues(keepWeekdays)<number[][]>, flattenOnce, getAverageValue, roundToNearest('0.1'), ]) const averageFreeThrows = getAverageFreeThrows( dailyFreeThrowsPerWeek ) console.log(averageFreeThrows) // is 5.3