函数组合

1、函数组合

函数组合:如果一个函数要经过多个函数处理才能得到最终值,这个时候可以把中间过程的函数合并成一个函数;

函数就像是数据的管道,函数组合就是把这些管道连接起来,让数据穿过多个管道形成最终结果;

函数组合默认是从右到左执行

function compose(f, g){     return function(value){         return f(g(value))     } } function reverse(array){     return array.reverse() } function first(array){     return _.first(array) } const last = compose(first,reverse) console.log(last([1,2,3,4]))  

2、lodash组合函数

// lodash 中的函数组合方法 _.flowRight() const reverse = arr => arr.reverse(); const first = arr => _.first(arr); const toUpper = s => s.toUpperCase(); const result = _.flowRight(toUpper,first,reverse); console.log(result(['a','b','d','e']))

3、函数组合-结合律

const r = _.flowRight(_.flowRight(_.toUpper,_.first),_.reverse) console.log(r(['a','b','d','e']))

4、函数组合-调试

const msg = _.curry((tag,v) => {     console.log(tag,v);     return v; }) const f = _.flowRight(_.toUpper,_.first,msg('reverse之后'),_.reverse); f(['a','b','d','e']) 

5、lodash-fp模块

lodash-fp传参是先写条件,后传值(例如:数组)

lodash是被柯里化过的,所以传一个参数的时候,会返回一个函数等待传其他的参数

const fp = require('lodash/fp'); const fpMap = fp.map(fp.toUpper,['a','b','c','d']); console.log(fpMap); const fpSplit = fp.split(' ','Hello World'); console.log(fpSplit);

6、用lodash-fp写组合函数

const fpResult = fp.flowRight(fp.join('-'),fp.map(fp.toLower),fp.split(' ')) console.log(fpResult('HELLO WORLD NO'))

7、lodash 和 lodash-fp 模块中map的区别

(1) lodash中的map不能通过以下方式使用parseInt console.log(_.map(['23','18','10'],parseInt)); (2) lodash-fp中的map可以通过以下方式使用parseInt console.log(fp.map(parseInt,['23.5','18','10']))

8、pointfree案例

例一: const r = fp.flowRight(fp.replace(/\s+/g,' '),fp.toLower) console.log(r('Hello    Word')) 例二:把一个字符串中的首字母提取并转换成大写,使用.作为分隔符 // world wild web ===> W. W. W const result = fp.flowRight(fp.join('. '),fp.map(fp.toUpper),fp.map(fp.first),fp.split(' ')); console.log(result('world wild web'))        
上一篇:javascript – JS:替换与模式匹配的对象中的所有字符串值?


下一篇:javascript – 有没有办法在Lodash或Underscore中指定null的默认值?