组合函数的妙用
//组合函数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:14 编辑
GGNB!
😄
这是最近在读什么框架源码么 李恒道 发表于 2022-2-23 16:45
这是最近在读什么框架源码么
没有,就是在学习 rubinTime 发表于 2022-2-23 16:58
没有,就是在学习
用的都是一些框架常用的,哥哥不如顺便找个框架源码读! 李恒道 发表于 2022-2-23 17:01
用的都是一些框架常用的,哥哥不如顺便找个框架源码读!
这是根基!
页:
[1]