在ES6中如何使用reduce方法

在ES6中如何使用reduce方法

这篇文章将为大家详细讲解有关在ES6中如何使用reduce方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

强大的reduce

数组的reduce方法用途很广。它一般被用来把数组中每一项规约到单个值。但是你可以利用它做更多的事。

在ES6中如何使用reduce方法

1 使用reduce同时实现map和filter

假设现在有一个数列,你希望更新它的每一项(map的功能)然后筛选出一部分(filter的功能)。如果是先使用map然后filter的话,你需要遍历这个数组两次。

在下面的代码中,我们将数列中的值翻倍,然后挑选出那些大于50的数。有注意到我们是如何非常高效地使用reduce来同时完成map和filter方法的吗?

constnumbers=[10,20,30,40];constdoubledOver50=numbers.reduce((finalList,num)=>{num=num*2;if(num>50){finalList.push(num);}returnfinalList;},[]);doubledOver50;//[60,80]

2 使用reduce取代map和filter

如果你认真阅读了上面的代码,你应该能理解reduce是可以取代map和filter的。

3 使用reduce匹配圆括号

reduce的另外一个用途是能够匹配给定字符串中的圆括号。对于一个含有圆括号的字符串,我们需要知道(和)的数量是否一致,并且(是否出现在)之前。

下面的代码中我们使用reduce可以轻松地解决这个问题。我们只需要先声明一个counter变量,初值为0。在遇到(时counter加一,遇到)时counter减一。如果左右括号数目匹配,那最终结果为0。

//Returns0ifbalanced.constisParensBalanced=(str)=>{returnstr.split('').reduce((counter,char)=>{if(counter<0){//matched")"before"("returncounter;}elseif(char==='('){return++counter;}elseif(char===')'){return--counter;}else{//matchedsomeothercharreturncounter;}},0);//<--startingvalueofthecounter}isParensBalanced('(())')//0<--balancedisParensBalanced('(asdfds)')//0<--balancedisParensBalanced('(()')//1<--notbalancedisParensBalanced(')(')//-1<--notbalanced

4 统计数组中相同项的个数

很多时候,你希望统计数组中重复出现项的个数然后用一个对象表示。那么你可以使用reduce方法处理这个数组。

下面的代码将统计每一种车的数目然后把总数用一个对象表示。

varcars=['BMW','Benz','Benz','Tesla','BMW','Toyota'];varcarsObj=cars.reduce(function(obj,name){obj[name]=obj[name]?++obj[name]:1;returnobj;},{});carsObj;//=>{BMW:2,Benz:2,Tesla:1,Toyota:1}

关于“在ES6中如何使用reduce方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

发布于 2022-03-18 22:48:11
收藏
分享
海报
0 条评论
30
上一篇:Python的time库的函数怎么使用 下一篇:在ES6中对象解构的示例分析
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码