high-orderfunction,英文叫做HigherOrderfunction。可以接收另一个函数作为参数的函数称为高阶函数。例子:functionadd(x,y,f){returnf(x)+f(y);}//用代码验证:add(-5,6,Math.abs);//111.普通高阶函数ES6中数组增加了几个方法,其中map、reduce、filter都是高阶函数。另外,普通排序也是一个高阶函数。三种新方法分别介绍。1.1、filter过滤就是对数组进行过滤,返回满足条件的数据,并组成一个新的数组返回,丢弃不满足条件的数据。例1:取出数组中小于100的数据放入新数组letgrad=[102,188,55,66,200,800]letarr2=grad.filter(function(item){returnitem<=100})console.log("arr2",arr2)//55,66上面的例子中,filter传入的参数是一个函数,传入的函数依次作用于每一个元素,然后根据判断是保留还是丢弃该元素返回值是真还是假。因为只有55和66满足条件,所以新数组中只有这两个元素。1.2、mapmap是映射的意思。原数组映射到新数组,返回值是新数组,不改变原数组。新数组和原数组的长度不会改变。示例2:将数据的每个元素放大2倍。letarr2=[55,66]letarr3=arr2.map(item=>{returnitem*2})//返回结果[110,132]上面的例子,map接收的参数是一个函数,依次作用于每个元素,for元素被放大2倍,可以对其进行任何复杂的操作。1.3.reducerreduce对数组进行汇总,往往进入一个数组,出来就是一个数据。通常用于总和和平均值。示例3:对上一个示例返回的结果求和。letsum=arr3.reduce((tmp,item)=>{returntmp+item})//returnresult242关键是,如果我们要把上面三个例子组合在一起执行,最后能写多简单?//复写letgrad=[102,188,55,66,200,800]letarr2=grad.filter(function(item){returnitem<=100})letarr3=arr2.map(item=>{returnitem*2})letsum=arr3。reduce((tmp,item)=>{returntmp+item})//简单的写法letsum2=grad.filter(item=>{returnitem<=100}).map(item=>{returnitem*2}).reduce((tmp,item)=>{returntmp+item})
