reduce(function(total,value,index,array) { })方法接收一个函数作为累加器。数组中的每个值从左到右开始缩减,最终计算为一个值
total:必须有,有两个作用,一是在最开始作为一个初始值参与运算;二是接收每次循环结束的返回值,即每次循环结束的返回值都累加到total身上。
value:必须有,表示当前元素
index:可选,当前元素的下标(索引)
array:可选,当前元素所属的数组对象
initialValue:可选,翻译为初始值。当initialValue有值时,total的初始值=initialValue,value默认为当前数组的第一个元素; 当initialValue没有值时,total的初始值默认为数组的第一个元素,此时value默认为数组的第二个元素。
例1、用reduce求和
var arr = [3, 4, 22, 33, 654, 75, 2];
var rel = arr.reduce(function(total, value) {
console.log(total + '---' + value)
//接受一个函数作为累加器
return total + value;
})
console.log(rel);
如上述代码所示:在第一次循环中,由于没有initialValue,故total的初始值为数组的第一个元素 3 ;value值为数组的第二个元素 4 ;故第一次循环的返回值total=3+4=7
第二次循环中,total值变为7,value值从左到右依次查为22,故第二次循环的返回值total=7+22=29;
……
以此类推,直至value值为数组的最后一个元素2时,整个计算过程结束
例2、用reduce求最大值
var arr2 = [2, 223, 423, 54, 785, 65, 864, 22, 2];
var rel2 = arr2.reduce(function(total, value) {
return Math.max(total, value);
});
console.log(rel2);
例3、用reduce数组去重
arr3 = [2, 3, 2, 56, 22, 565, 56, 22];
var rel3 = arr3.reduce(function(total, value) {
if (!total.includes(value)) {
total.push(value);
}
return total
}, []);
console.log(rel3);