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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值