zoukankan      html  css  js  c++  java
  • 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
    
    // 没有初始值initialValue(即上面例子中的0),当数组为空时会抛出异常 提示reduce函数没有初始值,
    // 所以为兼容性一般加上initialValue

    2.合并二维数组

    var red = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
     return a.concat(b);
    }, []);

    3、合并多维数组

    let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
    const newArr = function(arr){
       return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
    }
    console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

    4、对象里的属性值求和

    var result = [
        {
            subject: 'math',
            score: 10
        },
        {
            subject: 'chinese',
            score: 20
        },
        {
            subject: 'english',
            score: 30
        }
    ];
    
    var sum = result.reduce(function(prev, cur) {
        return cur.score + prev;
    }, 0);
    console.log(sum)  //60

    5、统计一个数组中有多少个不重复的单词

     a)、不通过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;
    }

    b)、通过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;
      },{});
    }

        reduce(callback,initialValue)会传入两个参数,callback==》回调函数,initialValue==>初始值。当没有传入初始值时,prev是从数组中第一个元素开始的,next是数组的第二个元素;当传入初始值initalValue后,第一个将是initialValue,next是数组中的第一个元素。

    6、数组去重

    let arr = [1,2,3,4,4,1]
    let newArr = arr.reduce((pre,cur)=>{
        if(!pre.includes(cur)){
          return pre.concat(cur)
        }else{
          return pre
        }
    },[])
    console.log(newArr);   // [1, 2, 3, 4]

    7、累计函数的两个参数跟踪...

    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());

       

    未完,待续......
  • 相关阅读:
    zabbix自动发现 url 以及对http返回状态码监控实现 告警
    iOS 开发者账号到期续费流程
    iOS 开发 -----公司测试打包上传流程
    go语言 二叉树
    GO 语言队列实现
    GO 语言常用排序
    go 语言实现栈原理
    循环链表实现原理及运用约瑟夫环实例
    双向链表实现原理
    单向链表实现原理
  • 原文地址:https://www.cnblogs.com/zhishiyv/p/14454995.html
Copyright © 2011-2022 走看看