详解JavaScript 高阶函数
高阶函数简介
高阶函数的英文名叫Higher-OrderFunction,是函数式编程中的一种。他的表现形式往往是通过把函数作为参数传入另一个函数,或者将函数作为另一个函数的返回值返回。在实际开发业务中,高阶函数往往可以抽象我们的代码,将我们的命令式编程转换为复用性更高级的函数式编程,从而提升我们的代码质量。
下面拿3个面试中常问的高阶函数举例子,希望看完以后能够提升大家对JS的理解,提高我们的代码质量。chatischeap,showyoumycode~
Array.map()
功能介绍
map()方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。map()方法按照原始数组元素顺序依次处理元素。
tips
注意:map()不会对空数组进行检测。注意:map()不会改变原始数组。
实用意义及代码举例
//如果我们需要将一个数组中,每一项元素全都*2, //最基础的作法,是刚学JS时的循环遍历,再每一项中执行*2的操作,例如: letarr1=[0,1,2,3,4,5,6]; letarr2=[]; for(leti=0;iitem*2) console.log(arr2)//[0,2,4,6,8,10,12]
总结:
针对数组中每一项都要做的操作,可以实用map方法
Array.reduce()
功能介绍
reduce()方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce()可以作为一个高阶函数,用于函数的compose。
tips:
注意:reduce()对于空数组是不会执行回调函数的。
实用意义及代码举例
//如果有一个需求,需要我们将数组中每一项求和 //实用reduce,可以优雅简洁的实现: letarr1=[0,1,2,3,4,5,6]; letarr2=arr1.reduce((prev,cur)=>{//prev代表之前所有项的最终结果,cur代表当前项的值 returnprev+cur },0)//这里的0是初始项传入的值,这里写为0 console.log(arr2)//21求和完毕 //reduce也可以用于数组去重 letarr1=[0,1,2,3,4,5,6,5,6,7,6]; letarr2=arr1.reduce((prev,cur)=>{ //当之前所有项不包含当前项元素时,push,否则直接返回之前所有去重项。 prev.indexOf(cur)===-1&&prev.push(cur); returnprev },[])//传入空数组作为初始值 console.log(arr2)//[0,1,2,3,4,5,6,7]
总结:
针对数组中所有的项累计计算的操作,最终输入一个值,可以使用reduce方法
Array.filter()
功能介绍
filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
tips
注意:filter()不会对空数组进行检测。
注意:filter()不会改变原始数组。
实用代码举例
//例如,需求为获取数组中所有大于等于4的元素,将他们组成一个数组 letarr1=[0,1,2,3,4,5,6,5,6,7,6]; letarr2=arr1.filter((item)=>{ returnitem>=4 },[]) console.log(arr2)//[4,5,6,5,6,7,6]
总结:
对于数组中每一项的筛选功能,可以使用filter方法
Array.flat()
功能介绍
flat()方法可以将嵌套数组(多为数组)降维,变成低维数组或者一维数组。(数组摊平展开)
tips
注意:存在一定兼容性问题,例如IE不兼容
实用代码举例
letarr1=[0,1,2,3,4,5,[1,2,3],[1,2,[1,2,3,4]],6,7,6]; letarr2=arr1.flat(1)//flat中传入需要降维的层数,默认是1,如果有个三维数组他会被降级为二位数组, letarr3=arr1.flat(Infinity)//[0,1,2,3,4,5,1,2,3,1,2,1,2,3,4,6,7,6]//如果不管是几维数组,需要得到1维数组的话,可以直接使用Infinity console.log(arr2)//[0,1,2,3,4,5,1,2,3,1,2,[1,2,3,4],6,7,6]
以上就是详解JavaScript高阶函数的详细内容,更多关于JavaScript高阶函数的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。