前言在介绍:之前,让我们来看看reduce的参数。 reduce是数组的方法,其中包含参数(回调函数、初始值)
参数: reduce ((帐户,当前,当前索引,源阵列)={},init ) )
Accumulator :累加器Current :数组中的每个CurrentIndex:当前正在运行的数组元素索引SourceArray :原始数组,即调用reduce方法的数组init:是初始数组
1 .有初始值时
有初始值。 他将初始值分配给累加器,当前执行的数组元素从第一个项目开始
vararr=[ 10,20,30,40,50 ]; varcc=arr.reduce((add,val ) )={ return add val },10 ); console.log(cc ); //160 add (累加器的值) val (数值中项的值) retun
10 10 20
20 20 40
40 30 70
70 40 110
110 50 160
核心想法:在每次进行累积相加时将值指派给累积加法器,并且注意结果。 分析:首次执行return,10 (初始值) 10 )数组的第一项),通过reurun返回到add累加器,完成首次累加器。 此时,累加器的值为20,通过加到数组的第二项中,20 ) 20回到累加器,直到累加数组中的所有项目,相当于代入累加器。
2 .如果没有初始值,则将数组中的第一项指定给累加器,然后从数组中的第二项开始进行加法运算。 vararr=[ 10,20,30,40,50 ]; varcc=arr.reduce((add,val )={ return add val } ); console.log(cc ); //150 add (累加器的值) val (数值中项的值) retun
10 20 30
30 30 60
60 40 100
100 150 150
分析:请注意数组中没有初始值。 那么,将数组的第一项作为初始值代入累加器,从第二项开始进行加法运算。 return中最初返回到累加器的值为: 10 (第一项为累加器的初始值) (20 )阵列中的第二项) ),第二次相加,累加器的初始值为30 30阵列中的第三类型=60 (通过return ) 第3次:累加器的值) 60第4项的值) :40 return给累加器的值为) 60 40=100,第4次:累加器的值为) 100第5项的值) 50 100 50=150
3 .小情况1 .计算商品价格var arr=[{ name: ‘苹果’,price:},{ name: ‘橘子’,price:},{name3360 ‘香蕉
实现代码:
vartotal=ARR.Reduce((sum,obj ) ) sum=sumobj.pricereturnsum,0 ) console.log ) total ); //24构想:首先判断数组中是否有初始值,设为0,分配给累加器的值设为0。 obj表示数组内的各个项目,开始最初的扫描sum(5)=sum(0)0) obj.price(5) )数组内的第一个项目的price值),在return中返回5 开始第三次遍历(sum ) ) 14 )=8)以数组中第三个obj.price的值6 )通过return继续返回sum的console.log(total; //24
2 .计算商品总额的var arr=[{ name: ‘苹果’,total: 5,price: 12 },{ name: ‘橘子’,total33605,price: 13 } { name: ‘菠萝’,total: 5,price: 10 },}varcc=ARR.Reduce((sum,obj ) ) sum=sumobj.)
与分析器:的上述不同在于,将数值中的两个项相乘,然后相加计算,结果为225。