0


reduce()方法详解

定义和用法
reduce() 方法将数组缩减为单个值。
reduce() 方法为数组的每个值(从左到右)执行提供的函数。
函数的返回值存储在累加器中(结果/总计)。

注释:对没有值的数组元素,不执行 reduce() 方法。
注释:reduce() 方法不会改变原始数组。

语法

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

参数值
参数描述function(total, currentValue, index, arr)必需。为数组中的每个元素运行的函数。

函数参数:

参数描述total必需。initialValue,或函数先前返回的值。currentValue必需。当前元素的值。index可选。当前元素的数组索引。arr可选。当前元素所属的数组对象initialValue可选。作为初始值传递给函数的值。
1、实例解析 initialValue 参数

var arr =[1,2,3,4];var sum = arr.reduce(function(prev, cur, index, arr){
    console.log(prev, cur, index);return prev + cur;})
console.log(arr, sum);VM6252:3121VM6252:3332VM6252:3643VM6252:6(4)[1,2,3,4]10

这里可以看出,上面的例子index是从1开始的,第一次的prev的值是数组的第一个值。数组长度是4,但是reduce函数循环3次。

再来看一个

var  arr =[1,2,3,4];var sum = arr.reduce(function(prev, cur, index, arr){
    console.log(prev, cur, index);return prev + cur;},0);
console.log(arr, sum);VM282:3010VM282:3121VM282:3332VM282:3643VM282:6(4)[1,2,3,4]10

结论:如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。

2、reduce的简单用法

var  arr =[1,2,3,4];var sum = arr.reduce((x,y)=>x+y)var mul = arr.reduce((x,y)=>x*y)
console.log( sum );//求和,10
console.log( mul );//求乘积,24

3、reduce的高级用法

(1)计算数组中每个元素出现的次数

let names =['Alice','Bob','Tiff','Bruce','Alice'];let nameNum = names.reduce((pre,cur)=>{if(cur in pre){
    pre[cur]++}else{
    pre[cur]=1}return pre
},{})
console.log(nameNum);//{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

(2)数组去重

let arr =[1,2,3,4,4,1]let newArr = arr.reduce((pre,cur)=>{if(!pre.includes(cur)){return pre.concat(cur)}else{return pre
    }},[])
console.log(newArr);// [1, 2, 3, 4]

(3)将二维数组转化为一维

let arr =[[0,1],[2,3],[4,5]]let newArr = arr.reduce((pre,cur)=>{return pre.concat(cur)},[])
console.log(newArr);// [0, 1, 2, 3, 4, 5]

(4)将多维数组转化为一维

let arr =[[0,1],[2,3],[4,[5,6,7]]]constnewArr=function(arr){return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])}
console.log(newArr(arr));//[0, 1, 2, 3, 4, 5, 6, 7]

(5)对象里的属性求和

var result =[{subject:'math',score:10},{subject:'chinese',score:20},{subject:'english',score:30}];var sum = result.reduce(function(prev, cur){return cur.score + prev;},0);
console.log(sum)//60

本文转载自: https://blog.csdn.net/wangxinxin1992816/article/details/124536863
版权归原作者 乐夫天命兮 所有, 如有侵权,请联系我们删除。

“reduce()方法详解”的评论:

还没有评论