reduce()方法将指定的函数将数组元素进行组合,生成单个值,可以实现累加
一、reduce参数
1、第一个参数是方法,方法里的参数:
@param result 运算结果
@param current 当前值
@param currentIndex 当前值得索引值
@param arr 自身数组
2、第二个参数可选,是一个传递给函数的初始值。如果第二个参数有值,那么作为运算的初始值参与函数运算,如果第二个参数没有值,那么数组中的首位将作为函数运算的初始值,参与函数运算的数组其他位向后平移一位。
var arr = [2,3,4,5,6];
/* reduce参数
@param result 预算结果
@param current 当前值
@param currentIndex 当前值得索引值
@param arr 自身数组
*/
var b = arr.reduce(function(result,current,currentIndex,arr){
console.log(result,current,currentIndex,arr,'param');
/* 第二个参数当做初始值进行运算:
10 + 2 ---> 12
12 + 3 ---> 15
15 + 4 ---> 19
19 + 5 ---> 24
24 + 6 ---> 30
*/
return result + current
},10);
var c = arr.reduce(function(result,current,currentIndex,arr){
console.log(result,current,currentIndex,arr,'param');
/* 第二个参数没有的话,将数组中的首位将作为函数运算的初始值,参与函数运算的数组其他位向后平移一位:
10 + 2 ---> 12
12 + 3 ---> 15
15 + 4 ---> 19
19 + 5 ---> 24
24 + 6 ---> 30
*/
return result + current
});
console.log(b); //30
console.log(c); //20
二、自己封装reduce()
Array.prototype.MyReduce = function(func,init){
var len = this.length;
var prev = init;
var i = 0;
if(init == undefined){
prev = this[0];
i = 1;
}
for(i;i<len;i++){
prev = func(prev,this[i],i,this)
}
return prev
}
三、练习
获得当前时间并将其转换成字符串形式
var date = new Date();
var arr = [date.getHours(),date.getMinutes(),date.getSeconds()];
var result = arr.reduce(function(result,current){
/*用0拼接,主要是用于小于10的数字,
slice裁剪主要是截取最后2位
01 slice 01
010 slice 10*/
return result + ('0'+current).slice(-2)
},"");
console.log(result)