• JS --- reduce()函数


    定义:

    reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的。


    案例
    1. 计算数组总和
    var num = [1,2,3,4,5];
    var res = num.reduce(function(total,num){
        return total+num;
        //return total + Math.round(num);//对数组元素四舍五入并计算总和
    },0);
    console.log(res);//15
    //num.reduce((total,num) => total += num, 0);
    //没有初始值initialValue(即上面例子中的0),当数组为0时会抛出异常提示reduce函数没有初始值,所以为兼容性一般加上initialValue
    1. 合并二维数组
    var red = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
     return a.concat(b);
    }, []);
    console.log(red)
    VM291:4 (6) [0, 1, 2, 3, 4, 5]
    1. 统计一个数组中有多少个不重复的单词:
    不用reduce时:
    var arr = ["apple","orange","apple","orange","pear","orange"];
    function getWordCnt(){
      var obj = {};
      for(var i= 0, l = arr.length; i< l; i++){
        var item = arr[i];
        obj[item] = (obj[item] +1 ) || 1;
      }
      return obj;
    }
    console.log(getWordCnt());
    VM3704:14 {apple: 2, orange: 3, pear: 1}
    
    用reduce时:
    var arr = ["apple","orange","apple","orange","pear","orange"];
    function getWordCnt(){
      return arr.reduce(function(prev,next){
        prev[next] = (prev[next] + 1) || 1;
        return prev;
      },{});
    }
    console.log(getWordCnt());
    VM3704:14 {apple: 2, orange: 3, pear: 1}
    1. 对reduce的理解:
      reduce(callback,initiaValue)会传入两个变量,回调函数(callback)和初始值(initiaValue)。
      假设函数有4个传入参数,prev和next,index和array。 Prev和next是你必须要了解的。
      当没有传入初始值时,prev是从数组中第一个元素开始的,next数组是第二个元素。
      但是当传入初始值(initiaValue)后,第一个prev将是initivalValue,next将是数组中的第一个元素。
      比如:
    var arr = ["apple","orange"];
    function noPassValue(){
      return arr.reduce(function(prev,next){
        console.log("prev:",prev);
        console.log("next:",next);
        return prev;
      });
    }
    
    function passValue(){
      return arr.reduce(function(prev,next){
        console.log("prev:",prev);
        console.log("next:",next);
        prev[next] = 1;
        return prev;
      },{});
    }
    console.log("No Additional parameter:",noPassValue());
    console.log("----------------");
    console.log("With {} as an additional parameter:",passValue());
    
    
    VM415673:4 prev: apple
    VM415673:5 next: orange
    VM415673:4 prev: apple
    VM415673:5 next: orange
    VM415673:19 No Additional parameter: apple
    VM415673:20 ----------------
    VM415673:13 prev: {}
    VM415673:14 next: apple
    VM415673:13 prev: {apple: 1}
    VM415673:14 next: orange
    VM415673:21 With {} as an additional parameter: {apple: 1, orange: 1}
    
     



  • 相关阅读:
    centos7 hbase 搭建笔记
    【转】python 2.6.6升级到python 2.7.x版本的方法
    centos7 sqoop 1 搭建笔记
    centos7 hive + 远程mysql 搭建笔记
    docker 批量操作容器
    centos7 hdfs yarn spark 搭建笔记
    【转】mysql查看表空间占用情况
    【转】Centos 7 修改主机名hostname
    jQuery选择
    jQuery检查复选框是否被选
  • 原文地址:https://www.cnblogs.com/mafeng/p/10249887.html
Copyright © 2020-2023  润新知