一个很好用的计算方法,购物车累加或者数组重复最多数值计算都可以

正文

1、reduce()的基本概念

reduce英文译为缩小减少的意思

includes因为译为包含的意思

定义:reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。reduce() 对于空数组是不会执行回调函数的。

分析:reduce()针对非空数组执行操作,接收一个回调函数,这个函数作为一个累加器,定义累加的规则,然后循环遍历进行累加,返回最终结果,需要注意该方法没有创建新数组,同时也不会改变原数组,返回的结果是一个数值(该数值根据返回结果而定)。

根据上面的理解,先用自己的方法模仿下实现一个数组的累加。

var arr=[1,2,3,4] var rules=function(a,b){ return a+b }

function myreduce(array,callback){

//校验 if (!Array.isArray(array)) { throw('调用对象必须是一个数组'); }

if (typeof callback != 'function') { throw('累计器必须是一个函数类型'); }

let initialValue=0//定义初始值为0

if (array.length === 0) { return initialValue; }

for (let index = 0; index < array.length; index++) { initialValue=callback(initialValue,array[index]) } return initialValue } var totalValue =myreduce(arr,rules) console.log(totalValue)//输出10

2、reduce()的使用语法

 

/** * @param function 必要参数,用于执行每个数组元素的函数

* @param initialValue 可选参数,传递给函数的初始值

*/ array.reduce( /** * @param total 必要参数,初始值或计算结束后的结果。

* @param currentValue 必要参数,当前元素

* @param currentIndex 可选参数,当前参数的下标

* @param arr 可选参数,数组对象

*/ function(total, currentValue, currentIndex, arr), initialValue );

分析:reduce()被一个非空数组调用(如果被非空数组调用返回undefined),接收两个参数,一个callback和一个设置的累加初始值,需要注意的是如果给reduce()传入了初始值,则在该值的基础是做累加操作,如果初始值不存在,则total为数组的第一项,currentValue为下一项,在第一项的基础上累加,相当于设置初始值为0,然后逐步累加。

3、常见使用方法

用reduce方法实现求数组的和

var arr=[1,2,3,4]var total=arr.reduce((a,b)=>a+b)console.log(total)//输出10

计算数组中元素出现的次数

let arr = ['A', 'B', 'C', 'B', 'A'];let 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}

将二维数组转成一维

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]//同样可以实现多维到一维

求对象中属性的总和,如:求班级同学总分

let info=[ { name:"小明", score:100 },{ naem:"小红", score:110 }, { name:"小强", score:120 } ]

let totalScore=info.reduce((pre,cur)=>{ return pre+cur.score },0)

console.log(pre);//满足条件的数组,如 0,100,210,330

console.log(totalScore);//输出330

数组去重

 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]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值