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

组合函数的妙用

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

    [LV.1]初来乍到

    22

    主题

    104

    回帖

    170

    积分

    中级工程师

    积分
    170
    发表于 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的每日心情
    擦汗
    2024-3-25 15:30
  • 签到天数: 135 天

    [LV.7]常住居民III

    4

    主题

    109

    回帖

    206

    积分

    荣誉开发者

    积分
    206

    荣誉开发者油中2周年

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

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

    GGNB!

    😄

    可恃唯我
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5961

    回帖

    6760

    积分

    管理员

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

    积分
    6760

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2022-2-23 16:45:30 | 显示全部楼层
    这是最近在读什么框架源码么
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

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

    [LV.1]初来乍到

    22

    主题

    104

    回帖

    170

    积分

    中级工程师

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

    没有,就是在学习
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5961

    回帖

    6760

    积分

    管理员

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

    积分
    6760

    荣誉开发者喜迎中秋油中2周年生态建设者

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

    用的都是一些框架常用的,哥哥不如顺便找个框架源码读!
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4189

    回帖

    4056

    积分

    管理员

    积分
    4056

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

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

    这是根基!
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

    发表回复

    本版积分规则

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