高阶函数
高阶函数是将函数作为参数或返回值的函数
下面介绍三个高阶函数
1.1 map/reduce
map
map函数定义在JavaScript的Array中,调用Array的map函数,传入自己的函数,就得到一个新的Array作为结果
let new2Nums = newNums.map(function (n) {
return n * 2
})
reduce
reduce作用:对数组中所有的内容进行汇总
Array的reduce的一个函数作用在这个Array的[x1,x2,x3…]上,这个函数必须接收两个参数,reduce把结果继续和下一个元素做累计运算
// reduce函数的使用,preValue是之前运算结果,preValue初始化为0
let new3Nums = new2Nums.reduce(function (preValue, n) {
return preValue + n
}, 0)
1.2 filter
filter的回调函数中:必须返回一个Boolean类型
filter把传入的函数依次作用于每个元素
true:当返回true时,函数内部会自动将这次回调的n加入新数组中
false:当返回false时,函数内部会过滤掉这个n
filter函数的使用:
将所有大于50的数字取出,并存放到新数组中
const arr = ['11', '44', '22', '77', '100']
let newNums = arr.filter(function (n) {
return n < 50
})
console.log(newNums);
高阶函数汇总写法
// 汇总写法
let total = arr.filter(function(n){
return n < 50
}).map(function(){
return n*2
}).reduce(function(preValue,n) {
return preValue+n
},0)
console.log(total);
1.3 sort排序方法
因为Array的sort()方法默认把所有元素先转换为String再排序,结果'10'排在了'2'的前面,因为字符'1'比字符'2'的ASCII码小。如果不知道sort()方法的默认排序规则,直接对数字排序,绝对栽进坑里!
幸运的是,sort()方法也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。
// Array的sort()方法
// const arr = ['11', '44', '22', '77', '100']
arr.sort(function (x, y) {
if (x > y) {
return -1;
}
if (x < y) {
return 1
}
return 0
})
// sort()方法
let arr1 = ['a','c','b'];
let arr2 = arr1.sort();
console.log(arr1); // ['a','b','c']
console.log(arr2); // ['a','b','c']
// arr1和arr2是同一对象,arr1 === arr2