fp : Functional Programming 函数式程序设计

  • fp模块提供了实用的对函数式编程友好的方法
  • 提供了不可变 auto-aurried iteratee-first data-last 的方法(自动柯里化、函数优先、数据置后)
  1. // _lodash 的 _.map 和 _.split 数据优先 函数置后
  2. const arr = _.map(['a','b','c'],_.toLower);
  3. console.log(arr)
  4. // [ 'a', 'b', 'c' ]
  5. const arr1 = _.map(['a','b','c'])
  6. console.log(arr1)
  7. // [ 'a', 'b', 'c' ] 没有第二个参数 会返回原数组
  8. const arr2 = _.split('hello world', ' ')
  9. console.log(arr2)
  10. // [ 'hello', 'world' ]
  11. // lodash 中的 fp 模块 从调用方法上可以看出来 函数优先 数据置后
  12. const fp = require('lodash/fp');
  13. const fpArr = fp.map(_.toLower,['e','f','g']);
  14. console.log(fpArr)
  15. // [ 'e', 'f', 'g' ]
  16. const fpArr1 = fp.map(_.toLower)(['e','f','g']);
  17. console.log(fpArr1)
  18. // [ 'e', 'f', 'g' ]
  19. // 从 fpArr 和 fpArr1 可以看出 fp.map方法 是被柯里化后的方法
  20. const fpSplit = fp.split(' ', 'nice to meet you');
  21. console.log(fpSplit)
  22. // [ 'nice', 'to', 'meet', 'you' ]
  23. const fpSplit2 = fp.split(' ')('nice to meet you');
  24. console.log(fpSplit2)
  25. // [ 'nice', 'to', 'meet', 'you' ]

fp 模块的运用

使用lodash 中的 fp 模块 实现 将 ‘NEVER SAY DIE’ 转换成 ‘never-say-die’

  1. const format = fp.flowRight(fp.join('-'),fp.split(','),fp.toLower,fp.split(' '));
  2. const result = format('NEVER SAY DIE');
  3. console.log(result)
  4. // never-say-die
  5. const format2 = fp.flowRight(fp.join('-'),fp.map(fp.toLower),fp.split(' '));
  6. const result2 = format2('NEVER SAY DIE');
  7. console.log(result2);
  8. // never-say-die