rubinTime 发表于 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){
      returnfns.reduceRight((prev,func)=>{
      //reduceRight与reduce的区别
      //reduceRight对数组元素的遍历执行是从右到左
          return func(prev)
      },x)
   }
}

const pipe=(...fns)=>{
//pipe的实现和compose没什么不同,只是把reduceRight换成了reduce
//改变了传参的顺序,符合正常人的逻辑
return function(x){
   returnfns.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))

cocang 发表于 2022-2-23 16:12:56

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

GGNB!

😄

李恒道 发表于 2022-2-23 16:45:30

这是最近在读什么框架源码么

rubinTime 发表于 2022-2-23 16:58:03

李恒道 发表于 2022-2-23 16:45
这是最近在读什么框架源码么

没有,就是在学习

李恒道 发表于 2022-2-23 17:01:34

rubinTime 发表于 2022-2-23 16:58
没有,就是在学习

用的都是一些框架常用的,哥哥不如顺便找个框架源码读!

王一之 发表于 2022-2-23 17:12:02

李恒道 发表于 2022-2-23 17:01
用的都是一些框架常用的,哥哥不如顺便找个框架源码读!

这是根基!
页: [1]
查看完整版本: 组合函数的妙用