js高阶函数 - filter/map/reduce

高阶函数

高阶函数 — 一个函数接收另一个函数作为参数的函数

filter() — 过滤

filter中的回调函数必须返回一个布尔值,当返回true,函数内部会将回调的n加入到新的数组中,当返回false时,则把n过滤掉。

map() — 映射

对n进行处理,返回处理后的n加入到新数组中

reduce() – 汇总

至少传两个值

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
  
    const nums=[10,20,50,70,200,130,160,80];

    // 1、 需求:取出所有大于100的数字
    
    let newNums=[];
    for(let n of nums){
       if(n < 100){
         newNums.push(n)
       }
     }
     console.log(newNums);


    // 2、需求:将所有小于100的数字进行转化:全部*2
     let new2Nums=[];
     for(let n of newNums){
       new2Nums.push(n * 2)
     }
     console.log(new2Nums);
    
    
     // 3、需求:将所有的2中的数字相加,得出结果
     let total=0;
     for(let n of new2Nums){
       total += n;
     }
     console.log(total);
    

    // 高阶函数的使用:filter/map/reduce
    // filter中的回调函数与一个要求:必须返回一个boolean值
    // true:当返回true时,函数内部会自动将这次回调的n加到新的数组里面
    // false:当返回false时,函数内部会过滤掉这次的n

    let newNums=nums.filter(function(n) { //回调函数用于遍历数组里面的元素,有多少元素遍历几次
      return n < 100
    })
    console.log(newNums);
    
    
    // 2、map函数的使用
    //  [10, 20, 50, 70, 80]
    let new2Nums=newNums.map(function(n) {
      return n * 2
    })
    console.log(new2Nums);//[20, 40, 100, 140, 160]

    // 3、reduce函数的使用
    // reduce作用对数组中所有的内容进行汇总
    // [20, 40, 100, 140, 160]
    let total=new2Nums.reduce(function(preValue,n) {
      return preValue + n
    },0)
    console.log(total);


    // 第一次:初始化 preValue 0 然后是 n 20
    // 第二次:之后 preValue 0+20 然后是 n 40
    // 第三次:之后 preValue 20+40 然后是 n 100
    // 第四次:之后 preValue 60+100 然后是 n 140
    // 第五次:之后 preValue 160+140 然后是 n 160
    // 第六次:之后 preValue 300+160 
    
    
    // 链式调用:
    let totals=nums.filter(function(n) {
      return n < 100;
    }).map(function(n) {
      return n * 2;
    }).reduce(function(preValue,n) {
      return preValue + n;
    },0)
    console.log(totals);

    // 或者用箭头函数
    let totals2=nums.filter(n => n < 100).map(n => n*2).reduce((pre,n) => pre+n);
    console.log(totals2);
    

  </script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值