reduce()的基本概念
定义:reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。 reduce() 对于空数组是不会执行回调函数的。
分析:reduce()针对非空数组执行操作,接收一个回调函数,这个函数作为一个累加器,定义累加的规则,然后循环遍历进行累加,返回最终结果,需要注意该方法没有创建新数组,同时也不会改变原数组,返回的结果是一个数值(该数值根据返回结果而定)。
语法
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
参数
callback
:执行数组中每个值 (如果没有提供 initialValue则第一个值除外)的函数,包含四个参数:
accumulator:累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue(见于下方)。
currentValue:数组中正在处理的元素。
index 可选:数组中正在处理的当前元素的索引。 如果提供了initialValue,则起始索引号为0,否则从索引1起始。
array 可选:调用reduce()的数组
initialValue:作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。
常用的一些实例
1.数组累加求和
var arr= [0,1,2,3,4]
var sum =arr.reduce((prev, cur)=> {
return prev + cur;
},0);
console.log(sum)//10
2.计算数组中元素出现的次数
var arr = ['A', 'B', 'C', 'B', 'A'];
var times = arr.reduce((pre,cur)=>{
if(cur in pre){
pre[cur]++
}else{
pre[cur] = 1
}
return pre
},{})
console.log(times);//输出{A:2,B:2,C:1}
3.将二维数组转成一维
var arr = [[0, 1], [2, 3], [4, 5]]
var newArr = arr.reduce((pre,cur)=>{
return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]
4.数组去重
var arr = [1,2,3,4,4,1]
var newArr = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(newArr);// [1, 2, 3, 4]
5.求数组项最大值
var arr = [1,2,3,4,5,6]
var max = arr.reduce((prev, cur)=> {
return Math.max(prev,cur);
});
console.log(max);// 6
网友评论