基本概念
reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。
reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。
语法
arr.reduce(callback,[initialValue])
callback (执行数组中每个值的函数,包含四个参数)
previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
currentValue (数组中当前被处理的元素)
index (当前元素在数组中的索引)
array (调用 reduce 的数组)
initialValue (作为第一次调用 callback 的第一个参数。)
案例
1.简单的计算求和
let num = [1,5,8,10],
initialValue =10,
callback = (previousValue,currentValue)=> previousValue+currentValue
res = num.reduce(callback),
res1 = num .reduce(callback,initialValue)
console.log(res) //24
console.log(res1) //34
2.求最小值和最小值的索引号
let num = [100,50,1,5,8,10],
callback = (previousValue,currentValue,index) => {
if(currentValue<previousValue.val){
previousValue.val = currentValue;
previousValue.index = index;
}
return previousValue
},
minVal = num.reduce(callback,{val:num[0],index:0});
console.log(minVal);//{index: 2,val: 1}
3.计算字符串中每个字符的出现次数
let srtRepeat = [..."abcdaabcaadd"].reduce((res, cur)=> {
res[cur] ? res[cur] ++ : res[cur] = 1
return res;
}, {})
console.log(srtRepeat); //{a: 5,b: 2,c: 2,d: 3}