[Functional Programming] Discard the High and Low Values From an Array of Numbers with Ramda

In this lesson we'll see how to use the without function to remove items in a known list from an array. Then we'll generate our exclusion list and apply it to without using reduceminmax and converge to detect the highest and lowest values in an array and creating a new array that excludes those values.

 
import {without, min, max, reduce, converge, identity, equals} from 'ramda'

const getLowest = reduce(min, Number.MAX_VALUE)
const getHighest = reduce(max, Number.MIN_VALUE)
const getExcluded = converge((a, b) => [a, b], [getLowest, getHighest])

// From
const dropHighLow2 = numbers => {
  /*
  // version 1
  const lowest = getLowest(numbers)
  const highest = getHighest(numbers)
  return without([lowest, highest], numbers);
  */
  
  /*
  // version 2
  return without(getExcluded(numbers), numbers);
  */
  
  // version 3
  return converge(without, [getExcluded, identity])(numbers)
}

// To
const dropHighLow = converge(without, [getExcluded, identity])

const res = dropHighLow([1,2,3,4,5,6,7,8])
console.log(res, equals(res, [2,3,4,5,6,7]))

 

posted @ 2021-03-10 19:47  Zhentiw  阅读(85)  评论(0)    收藏  举报