es6之reduce

数组的reduce方法,接收一个函数(必须)和指定的初始值(非必须)作为参数,函数有三个参数,分别为初始值,当前项,当前数组,进行累加或者累积操作,初始值为每次累加或者累计后的结果 
注意:在ie9一下的浏览器中,并不支持该方法 ! 
语法:arr.reduce(fn(pre,cur,arr){},[initialValue]) 
一些妙用: 
统计每个字符出现的次数

//方法1:
    var obj=Array.prototype.reduce.call(str,function(pre,cur){
        pre[cur]?pre[cur]++:pre[cur]=1;
        return pre;
    },{});
    console.log(obj);
    //{a: 4, b: 1, c: 3, d: 3, e: 3, …}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
 //方法2:
    var obj=str.split('').reduce(function(pre,cur){
        pre[cur]?pre[cur]++:pre[cur]=1;
        return pre;
    },{})
    console.log(obj);
     //{a: 4, b: 1, c: 3, d: 3, e: 3, …}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

累加或者累积

var arr=[1,2,3,4,5,6];
var sum=arr.reduce(function(pre,cur,index,arr){
    console.log(index);//当前项的下标
    return pre+cur;
});
console.log(sum);//21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

实现 add()(1,2)(3,4)(7,8,9)()

function add(){
        var sum=0;
        function inner(pre,cur){
            return pre+cur;
        }
        sum=Array.prototype.slice.call(arguments).reduce(inner,sum);
        return function(){
            if(arguments.length==0){
                return sum;
            }else{
                sum=Array.prototype.slice.call(arguments).reduce(inner,sum);
                return arguments.callee;
            }
        }

    }
    console.log(add()(1)(2,3)());//6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

reduce 操作对象 
可以通过第二个参数指定初始值操作对象的单个属性

 var result = [
        {
            subject: 'math',
            score: 88
        },
        {
            subject: 'chinese',
            score: 95
        },
        {
            subject: 'english',
            score: 80
        }
    ];
    var totalScore=result.reduce(function (pre,cur) {
        return pre+cur.score;
    },0);
    console.log(totalScore);

猜你喜欢

转载自blog.csdn.net/qinlulucsdn/article/details/81207069
今日推荐