几个常用高阶函数(es6)
filter
const nums = [10, 20, 111, 222, 444, 40, 50];
需求:取出小于100的数
//每次回调函数时自动填入形参n,第一次是10,第二次是20...
//filter中回调函数必须返回一个boolean值
//当返回true时,函数内部会自动将这次回调的n加入到新的数组中
//当返回false时,就会过滤掉n
let newNums = nums.filter(function (n) {
// n小于100的结果就是true,大于等于就是false
return n < 100
});
console.log(newNums);
// newNums=[10,20,40,50]
map
需求:将新的数组里面全部的数乘以2
//相同的是回调函数必须返回值,返回的值替代n
let newNums2 = newNums.map(function (n) {
return n*2
});
console.log(newNums2);
// newNums2=[20,40,80,100]
reduce
需求:求数组里面所有值的和
// reduce将数组里面的所有内容汇合处理。
// 第一个参数是上一次返回的值,第二个参数是这次使用的值
// 将回调函数视为第一个参数,第二个参数(也就是0)是初始值
// index 是当前元素的索引
// arr是当前元素的对象
let newNums3 = newNums2.reduce(function (preValue, n, index, arr) {
return preValue + n
}, 0);
console.log(newNums3);
// newNums3=240
最后可以一次复合写完最后的需求。
let total = nums.filter(function (n) {
return n<100
}).map(function (n) {
return n*2
}).reduce(function (preValue, n) {
return preValue + n
}, 0);
console.log(total);
es6语法一句话写完。
let total2 = nums.filter(n => n<100).map(n => n*2).reduce((pre, n) => pre+n);
console.log(total2);