上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

组合函数的妙用

[复制链接]
  • TA的每日心情
    开心
    2022-3-7 09:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    18

    主题

    93

    帖子

    118

    积分

    中级工程师

    Rank: 5Rank: 5

    积分
    118
    发表于 2022-2-23 13:51:53 | 显示全部楼层 | 阅读模式
    //组合函数
    let str="   !Innovation distinguishes between a. leader and a follower??   "

    //这些函数都是一个输入和一个输出
    const trim=str=>str.replace(/^\s*|\s*$/g,'')

    const noPunct=str=>str.replace(/[?.,!/g,'')

    const capitalize=str=>str.toUpperCase()

    const breakout=str=>str.split(" ")

    const noArticles=word=>(word!=='A'&&word!=="AN"&&word!=="THE")

    const filterArticles=arr=>arr.filter(noArticles)

    //正经输出
    console.log(filterArticles(breakout(capitalize(noPunct(trim(str))))))

    //不正经方法
    const compose=(...fns)=>{
       return function(x){
          return  fns.reduceRight((prev,func)=>{
            //reduceRight与reduce的区别
            //reduceRight对数组元素的遍历执行是从右到左
              return func(prev)
          },x)
       }
    }

    const pipe=(...fns)=>{
      //pipe的实现和compose没什么不同,只是把reduceRight换成了reduce
      //改变了传参的顺序,符合正常人的逻辑
      return function(x){
         return  fns.reduce((prev,func)=>{
             return func(prev)
         },x)
      }
    }
    const processArticles=compose(
    JSON.stringify,
    filterArticles,
    breakout,
    capitalize,
    noPunct,
    trim
    )
    const processArticles1=pipe(
      trim,
      noPunct,
      capitalize,
      breakout,
      filterArticles,
      JSON.stringify
      )

    //只想去特殊字符和字母大写
    const processArticles2=compose(capitalize,noPunct)
    //按空格字符转成数组,去掉"A"
    const processArticles3=pipe(breakout,filterArticles)

    console.log(processArticles(str)===processArticles1(str))
    console.log(processArticles(str),"\n",processArticles2(str),
    "\n",processArticles3(str))

  • TA的每日心情
    擦汗
    2022-4-16 18:33
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    5

    主题

    66

    帖子

    80

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    80

    活跃会员热心会员

    发表于 2022-2-23 16:12:56 | 显示全部楼层

    本帖最后由 cocang 于 2022-2-23 16:14 编辑

    GGNB!

    😄

    可恃唯我
    回复

    使用道具 举报

  • TA的每日心情

    2022-6-4 20:51
  • 签到天数: 32 天

    [LV.5]常住居民I

    328

    主题

    2877

    帖子

    2888

    积分

    荣誉开发者

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    2888

    猫咪币纪念章

    发表于 2022-2-23 16:45:30 | 显示全部楼层
    这是最近在读什么框架源码么
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-3-7 09:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    18

    主题

    93

    帖子

    118

    积分

    中级工程师

    Rank: 5Rank: 5

    积分
    118
    发表于 2022-2-23 16:58:03 | 显示全部楼层
    李恒道 发表于 2022-2-23 16:45
    这是最近在读什么框架源码么

    没有,就是在学习
    回复

    使用道具 举报

  • TA的每日心情

    2022-6-4 20:51
  • 签到天数: 32 天

    [LV.5]常住居民I

    328

    主题

    2877

    帖子

    2888

    积分

    荣誉开发者

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    2888

    猫咪币纪念章

    发表于 2022-2-23 17:01:34 | 显示全部楼层
    rubinTime 发表于 2022-2-23 16:58
    没有,就是在学习

    用的都是一些框架常用的,哥哥不如顺便找个框架源码读!
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 49 天

    [LV.5]常住居民I

    138

    主题

    1814

    帖子

    1988

    积分

    管理员

    Rank: 10Rank: 10Rank: 10

    积分
    1988

    猫咪币纪念章热心会员活跃会员突出贡献三好学生中秋纪念章国庆纪念章

    发表于 2022-2-23 17:12:02 | 显示全部楼层
    李恒道 发表于 2022-2-23 17:01
    用的都是一些框架常用的,哥哥不如顺便找个框架源码读!

    这是根基!
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表