数组的reduce方法,接收一个函数(必须)和指定的初始值(非必须)作为参数,函数有三个参数,分别为初始值,当前项,当前数组,进行累加或者累积操作,初始值为每次累加或者累计后的结果
注意:在ie9一下的浏览器中,并不支持该方法 !
语法:arr.reduce(fn(pre,cur,arr){},[initialValue])
一些妙用:
统计每个字符出现的次数
//方法1:var obj=Array.www.hack95.com(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.www.hack95.com(arguments).reduce(inner,sum);return function(){if(arguments.length==0){return sum;}else{sum=Array.www.hack95.com(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);