filter/map/reduce 都是高阶函数(参数也是一个函数)
filter
nums = [1,2,3,88,22,343434,234];
//1.需求:小于100的数字
let newnums = nums.filter(function(n){
return n<100
});
原理解释:传入n为22,22<100,返回值为true,n放入新数组中
filter中的回调函数有一个要求:必须返回布尔值
- true:函数内部自动会将这次回调的n传入新数组中
- false:函数内部会自动过滤掉这次的n
map
//2.需求:将所有值*2
let new2Nums = newnums.map(function(n){
return n*2
})
原理解释:传入n为1,n*2,再将返回值放入新数组中
reduce
//3.需求:将所有值汇总
let total =new2Nums.reduce(function(previousValue,n){
return previousValue + n
},0)
reduce 有两个参数
- previousValue是前一次循环的返回值
- n是当前传入的参数
原理解释
每一次的return值作为下一次previousValue值使用
- 第一次:previousValue值为0,n为2
- 第二次:previousValue值为100 n为4
- 第三次:previousValue值为100 n为6
综合使用
- 使用es6之前的function
//函数式编程
nums = [1,2,3,88,22,343434,234];
let total = nums.filter(function(n){
return n < 100;
}).map(function(n){
return n * 2;
}).reduce(function(previousValue,n){
return previousValue + n;
},0)
- 使用es6 箭头函数
//函数式编程
nums = [1,2,3,88,22,343434,234];
let total = nums.filter(n => n < 100;).map(n => n*2).reduce((previousValue,n) => previousValue + n)