高阶函数
在JavaScript中,我们可以将一个函数作为另一个函数的参量,例如:
f=Math.abs()//绝对值函数
function add(x,y,f)
{
return f(x)+f(y)
}
add(3,-4,f)//7
下面介绍几个常用的高级函数
map方法
map()方法可以对Array的每个对象进行操作。
例如对于一个数组[1,2,3,4,5],我们可以将数组内每个数进行平方以获得一个新数组
let x=[1,2,3,4,5]
let result=x.map(function(){
return x*x
})
console.log(result)//[1,4,9,16,25]
相较于for循环,通过map的方法我们可以更加直观的看到数组内的每个数被平方了。
我们可以通过map()做一些更有意思的事情,例如想一个字符串数组转换为number类型的数组。
let x=['1','2','3','4','5']
let result=x.map(Number)
console.log(result)//[1,2,3,4,5]
reduce方法
reduce()的函数需要传入两个参数,reduce将参数的计算结果与数组内的下一个元素做累积计算:
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
例如通过Array.reduce()对1-10求和
let arr=[]
for(let i=1;i<=10;i++)
{
arr.push(i)
}
let result=arr.reduce(function(x,y){
return x+y
})
console.log(result)//55
再例如,利用reduce把数组[1,2,3,4,5]变成12345
let arr=[1,2,3,4,5]
arr.reduce(function(x,y){
x*10+y
})
filter方法
filter()可以通过函数所表示的条件过滤掉数组中的元素。
filter通过返回值的true/false进行过滤
最简单的,我们利用filter保留一个数组中的偶数
let arr=[1,2,3,4,5,6,7,8,9,10]
let result=arr.filter(function(x)
{
if(x%2===0)
return true;
else return false;
})
console.log(result)//[2,4,6,8,10]
我们可以用filter方法筛选素数
function pick(arr)//pick函数挑选一个数组中的素数
{
let result=arr.filter(function(x)
{
if(x====1)//这个算法需要先排除1
return false;
for(let i=2;i<Math.sqrt(x);i++)//为了提高效率,将x开方
{
if (x%i===0)
return false
}
return true;
})
return result
}
console.log(pick([1,2,3,4,5,6,7,8,9,10]))//[2,3,4,5,7,9]