JavaScript数组的reduce()累加方法的使用


来源 | https://www.cnblogs.com/zaishiyu/p/14197699.html

前言

阅读文章之前先来考虑一个问题,如何去实现迭代一个数组,并且把它累加到一个值中?首先,能够想到的是设置一个初始值,然后通过循环遍历这个数组,将数组中的值一项一项累加起来,然后返回这个设置的值就是最终的结果。

这样实现起来也不算太复测,不需要写太多的代码,这篇就介绍一个数组的进阶一点的用法——reduce()的用法。

正文

1、reduce()的基本概念

定义: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(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]

以上就是本文的全部内容,希望给读者带来些许的帮助和进步,方便的话点个关注,小白的成长之路会持续更新一些工作中常见的问题和技术点。

学习更多技能

请点击下方公众号

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值