高阶函数:filter map reduce
这三个高阶函数都是数组中有几项就执行几次
编程范式:面向对象编程(第一公民:对象)/函数式编程(第一公民:函数)
const nums = [10, 20, 111, 222, 444, 40, 50]
//1、需求:去除所有小于100的数字
let newNums = []
for(let n of nums){
if(n < 100){
newNums.push(n)
}
}
//2、需求:将所有小于100的数字进行转化:全部乘以2
let new2Nums = []
for(let n of nums){
if(n < 100){
newNums.push(n * 2)
}
}
console.log( new2Nums )
//3、需求:将所有new2Nums数字相加,得到最终的结果
let total = 0;
for(let n of new2Nums){
total += n;
}
console.log( total )
以上写法用高阶函数会简便很多
const nums = [10, 20, 111, 222, 444, 40, 50]
//作用:filter中的回调函数有一个要求:必须返回一个boolean值
//true:当返回true时,函数内部会自动将这次回调的n加入到新数组中
//false:当返回在false时,函数内部会过滤掉这次的n
//filter的用法
let newFilter = nums.filter(function(n){
return n < 100;
})
console.log( newFilter )//10 20 40 50
//map的使用
//作用:对数组中的每一项都进行变化
let newMap = newFilter.map(function(n){
return n * 2
})
console.log( newMap )//20 40 80 100
//reduce的使用
//作用:对数组中所有的内容进行汇总
//reduce()里的回调函数有是2个参数,第一个参数是一个函数
//第二个参数表示初始值
//第一个参数是一个函数,函数有2个参数第一个参数是表示上一个值
//在这里perVal是0,因为有初始值是0,第二个参数n表示数组里的每一项值
let newReduce = newMap.reduce(function(perVal, n){
return perVal + n;
},0)
console.log( newReduce )//240
//第一次:preVal是0 n是20
//第二次:preVal是20 n是40
//第三次:preVal是60 n是80
//第四次:preVal是140 n是100
//240
//以上还可以写成
let total = nums.filter(function(n){
return n < 100
}).map(function(n){
return n * 2
}).reduce(function(perVal,n){
return perVal + n
},0)
console.log( total )
//箭头函数更简洁
let total = nums.filter(n => n < 100).map(n => n * 2).reduce((pre, n) => pre + n);
console.log( total )
网友评论