美文网首页
Lodash的FP模块

Lodash的FP模块

作者: Young_Jeff | 来源:发表于2021-07-02 17:15 被阅读0次

    前言:
    经常用Lodash的你,是否了解过它提供的FP模块?
    FP是啥 :FP(Functional Programming):函数式编程

    答:函数组合时有很多函数需要频繁柯里化,而Lodash/fp模块就是解决此问题的;

    FP模块特性:

    • auto-curried iteratee-first data-last (函数之先,数据之后)
    • 自动curry化
    • immutable

    Lodash普通函数使用方法

    // 数据置先,函数置后
    _.map(['a', 'b', 'c'], _.toUpper) 
    

    FP模块使用方法

    // 函数置先,数据置后
    fp.map(fp.toUpper, ['a', 'b', 'c'])
    fp.map(fp.toUpper)(['a', 'b', 'c']) 
    

    FP模块对于组合函数的友好

    const fp = require('lodash/fp')
    
    const f = fp.flowRight(fp.join('-'), fp.map(fp.toLower), fp.split(' '))
    
    console.log(f('NEVER SAY DIE')) // never-say-die
    

    使用者可以不用关心具体调用了哪个函数,每个函数可以随意组合调整。


    Lodash中map方法的小问题

    const _ = require('lodash')
    console.log(_.map(['23', '8', '10'], parseInt)) 
    

    期望结果:[23, 8, 10]
    实际结果:[ 23, NaN, 2 ]
    >为啥呢?

    image.png
    image.png

    原因:
    _.map的第二个参数(迭代函数)接受三个参数,第一个是遍历的当前值,第二个是当前索引,第三个是数组本身;
    parseInt第二个参数表示进制基数,可选值是2-36之间的整数
    所以运算结果是

    parseInt('23', 0, array)  //0表示默认值10
    parseInt('8', 1, array)
    parseInt('10', 2, array)
    //[ 23, NaN, 2 ]
    

    而使用fp模块的map方法不存在下面的问题

    console.log(fp.map(parseInt, ['23', '8', '10'])) 
    // [ 23, 8, 10 ]
    

    相关文章

      网友评论

          本文标题:Lodash的FP模块

          本文链接:https://www.haomeiwen.com/subject/rzxyultx.html