javascript reduce()的用法

再看reduce的用法。Array的reduce()把一个函数作用在这个Array的[x1, x2, x3…]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:

[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)

比方说对一个Array求和,就可以用reduce实现:

var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
    return x + y;
}); // 25

语法: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, …}

//方法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, …}

累加或者累积

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

实现 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

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

你可能感兴趣的:(javascript reduce()的用法)