JavaScript中高阶函数filter,map,reduce的使用
1. filter函数的使用
注意:filter中的回调函数有一个要求: 必须返回一个boolean值
- true: 当返回true时, 函数内部会自动将这次回调的n加入到新的数组中
- false: 当返回false时, 函数内部会过滤掉这次的n
let nums = [10, 20, 111, 222, 444, 40, 50];
// filter函数的使用
let newArr = nums.filter(function(n) {
return n < 100;
})
console.log(newArr); // [10, 20, 40, 50]
// 普通函数
let newNums=[];
for(let n of nums){
if(n<100){
newNums.push(n);
}
}
2. map函数的使用
// map函数的使用
let newArr2 = newArr.map(function(n){
return n * 2;
})
console.log(newArr2); //[20, 40, 80, 100]
// 普通函数
let new2Nums=[];
for(let n of newNums){
new2Nums.push(n*2);
}
3. reduce函数的使用
- nums.reduce(callback, initialValue)
- callback:每个元素都要执行的回调函数
- initicalValue:作为第一次调用 callback 的第一个参数。如果回调函数后面的0没写,默认为0
- reduce有两个参数,回调函数的第一个参数为上一个数值,第二个参数为当前数值,如果回调函数后面的0没写,默认为0
// reduce函数的使用
// 作用:对数组中所有的内容进行汇总
// preValue (上一次调用回调返回的值,或者是提供的初始值(initialValue),这个值可以使引用数据类型)
// n (当前数值)
let total=newArr2.reduce(function (preValue,n){
return preValue+n;
},0)
console.log(total);
// 第一次: preValue 0 n 20
// 第二次: preValue 20 n 40
// 第二次: preValue 60 n 80
// 第二次: preValue 140 n 100
// 240
// 普通函数
let total1=0;
for(let n of new2Nums){
total1+=n;
}
console.log(total1);
4. 三个函数联合使用
// 上面三个函数可以直接一起使用,使用链式编程
let total2 = nums.filter(function(n){
return n < 100;
}).map(function(n) {
return n * 2;
}).reduce(function(prevalue, n) {
return prevalue + n;
})
console.log(total2);
// 箭头函数
let total3 = nums.filter(n => n < 100).map(n => n * 2).reduce((prevalue, n) => prevalue + n);
console.log(total3);