十一、高阶函数:filter、map、reduce

/**
 *编程范式:命令式编程/声明式编程
 *编程范式:面向对象编程(第一公民:对象)/函数式编程(第一公民:函数)
 **/
// const nums= [10,20,30,50,111,222,333,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 new2Nums){
//  if(n<100){
//     newNums.push(n*2);
//   }
// }
// console.log(new2Nums);
// //将所有的数字相加,得到最终结果
// let total = 0;
// for(let n of new2Nums){
//  total +=n;
// }
// console.log(total);



//高阶函数:filter、map、reduce
/**
 * filter中的回调函数有一个要求:必须返回一个boolean值
 *   true:当返回 true 时,函数内部会自动将这次回调的 n 加入到新的数组中
 *   false:当返回false时,函数内部会过滤掉这次的n
 * */
//结果:10 20 40 50 
const nums = [10,20,111,222,444,40,50];
let newNums = nums.filter(function(n){
    return n < 100
});
console.log(newNums);

/**
 * map函数的使用
 * */ 
//结果:20 40 80 100
let nuew2Nums = newNums.map(function(n){
  return n * 2;
});
console.log(nuew2Nums);

/**
 * reduce函数的使用
 * 作用:对数组中的所有内容进行汇总
 * preValue参数:记录上次返回的结果的值
 **/
// 第1次:preValue=0  n=20
// 第2次:preValue=20  n=40
// 第3次:preValue=60  n=80
// 第4次:preValue=140  n=100
// 结果:240
let totel = nuew2Nums.reduce(function(preValue, n){
  return preValue + n;
},0);
console.log(totel);

// 写法二
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);

// 写法三
let total1 = nums.filter(n => n < 100)
                 .map(n => n * 2)
                 .reduce((pre,n)=> pre + n);
console.log(total1);              

  

posted @ 2022-04-07 11:52  搬砖工具人  阅读(25)  评论(0编辑  收藏  举报