const arr = [1,2,40,60,111,3,60,555,20,61]
    //  1.将数组中小于100的数字显示在一个新数组里
    // 普通方法:
        let newArr = []
        for(let n of arr){
          if(n<100){
        push是将<100的n添加进newArr数组里
            newArr.push(n)
          }
        }
      console.log(newArr)
    // 高阶函数filter
    // filter(callback())中的回调函数的值只能是Boolean值
    //当为true时:函数内部会自动将这次回调的n添加进新的数组
    //当为false时:函数会过滤掉这次的n
      let newArr = arr.filter(function(n){
        return n < 100
      })
      console.log(newArr)
//  2.将所有小于100的数进行转化,全部*2
    // 普通方法:
      let new2Arr = []
      for(let n of newArr){
        new2Arr.push(n * 2)
      }
      console.log(new2Arr)
    //高阶函数map
      let new2Arr = newArr.map(function(n){
        return n*2
      })
      console.log(new2Arr)
//  3.将所有小于100的数进行转化,全部*2之后相加求和
    // 普通方法:
      let total = 0
      for(let n of new2Arr){
        total += n
      }
      console.log(total)
    // 高阶函数reduce:作用是对数组中所有的内容进行汇总
    let total = new2Arr.reduce(function(preValue,n){
      return preValue + n
    },0)
    //reduce循环过程
    //第一次 preValue:0 n:2
    //第二次 preValue:2 n:4
    //第三次 preValue:6 n:80
    //...以此类推,最后计算出最终结果
    console.log(total)
 //三个高阶函数同时实现
    let total = arr.filter(function(n){
      return n < 100
    }).map(function(n){
      return n * 2
    }).reduce(function(preValue,n){
      return preValue + n
    },0)
    console.log(total)