reduce 方法

来源:互联网 发布:淘宝类似威廉的男装店 编辑:程序博客网 时间:2024/06/07 23:43

数组的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, …}
 //方法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);
原创粉丝点击