在ES6中如何使用reduce方法
这篇文章将为大家详细讲解有关在ES6中如何使用reduce方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
强大的reduce
数组的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方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。