ES6时代古代我们用for循环进行遍历。直到ES6的出现,给我们带来了一系列好用的新特性,map、filter、find、findIndex、some、every……都是好手。使用这些高阶函数可以极大的方便我们快速处理数据。比如用map遍历接口数据,然后用filter过滤最后我们要的数据,用find直接从一堆数据中找到我们要的。。。提供了我和reduce的由来通过处理数据的es6我经常使用api,但也有一个reduce。老实说,我以前没用过,但我知道有这么个东西。一开始,它对它的影响很深。我的一个同事经常在项目中使用它。每次看到他写的代码,我都好奇我为什么那么喜欢用它。地图不好吗?最后发现reduce查询表单很香。一次输入多个参数,一般是从网站或excel中复制过来,要求前端将参数中有空格、逗号或回车的部分截断后传给后端。这种要求也很常见。以前是用split把数组分割成数组,然后用map遍历去掉首尾空格。最后使用filter过滤空值。但是,这需要遍历两次。如果只想使用一个map来实现,那么必须定义一个额外的变量来存储数据。正好项目不太忙,于是开始研究如何更优雅的实现上面的数据过滤,四处寻找终于找到了reduce的芬芳。其实这种拼装数据用reduce是可以完美解决的。一般有些后端会要求用户不要传入没有填写的参数,不需要传空字符串或者空数组。然后我们直接把reduce的初始值给ChengUndefined就不会传给后端了,但是push的时候要注意额外的判断,不然会报错。回车、中英文逗号或空格分隔的正则字符:/\n+|,|,|\s+/g使用reduce过滤拼装数据demo:leta=['','1','zhou','']让b=a。reduce((m,n)=>{if(n){consttxt=n.trim()if(txt)m.push(txt)}returnm},[])控制台。log(b)//['1','zhou']项目中使用的完整示例代码://请求数据asyncquery(){const{orderIds,names}=this.queryFormletparams={page:this.page.index,大小:this.page.size,}this.fmtParams(params,'orderIds',orderIds)this.fmtParams(params,'names',names)constres=awaitthis.$axios({method:'post',url:'cafe123/api/info',data:params,})if(res.success){console.log(res)}}//格式化参数fmtParams(params,key,val){//if(val){//params[key]=val.split(/\n+/g).map(a=>a.trim()).filter(a=>a)//}if(val){//initial值设置为undefined,有效数据未填写时无需传参,如打空格,回车//回车分隔,中英文逗号或空格constlist=val.split(/\n+|,|,|\s+/g)params[key]=list.reduce((m,n)=>{if(n){consttxt=n.trim()if(txt){if(!m)m=[]m.push(txt)}}returnm},undefined)}}其实很多东西都是一样的,从你懂,到你真正懂,到你修行,直到你终于发现它的香气,每进阶都要经过一个阶段,凡事都要多问几个问题!
