未加星标

js数组方法之Reduce

字体大小 | |
[前端(javascript) 所属分类 前端(javascript) | 发布者 店小二04 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

reduce()和reduceRight()方法使用指定的函数将数组元素进行组合,生成单个值,这个生成单个值很重要,开发过程中往往会用到这个值。这在函数式编程中是常见的操作,通常被称为“注入”和“折叠”。

下面先举例说明一下reduce是如何工作的:

vara = [1,2,3,4,5]; varsum = a.reduce((x,y) =>x+y,0);// 数组求和 varproduct = a.reduce((x,y) =>x*y,1);// 数组求积 varmax = a.reduce((x,y) =>(x>y) ? x : y);// 求最大值

reduce()需要两个参数。第一个是执行化简操作的函数。华简函数的任务就是用某种方法把两个值组合或化简为一个值,并返回化简后的值。在上述的例子中,函数通过加法,乘法或取最大值法的方法组合两个值。第二个参数是一个传递给函数的初始值,此参数是可选的,不传的时候,默认是将数组的第一个作为初始值使用。

reduce()使用的函数与forEach()和map()使用的函数不同。比较熟悉的是,数组元素、元素的索引和数组本身将作为第2~4个参数传递给函数。第一个参数是到目前为止的华简操作累积的结果。第一次调用函数时,第一个参数是一个初始值,它就是传递给reduce()的第二个参数。

另外一点需要我们注意,那就是在空数组上,不带初始值参数调用reduce()将导致类型错误异常。如果调用它的时候只有一个值――数组只有一个元素并且没指定初始值,或者一个空数组并且指定一个初始值――reduce()只是简单地返回那个值而不会调用化简函数。

reduceRight()函数的工作原理跟reduce()一样,不同的是它按照的数组索引的从高到低处理数组。

下面举个使用reduce()函数能快速解决问题的例子,题目如下:

一个无序数组里有若干个正整数,范围从1到100,其中99个整数都出现了偶数次,只有一个整数出现了奇数次(比如1,1,2,2,3,3,4,5,5),如何找到这个出现奇数次的整数?

使用reduce()函数就很简单的得到结果了

vararr = [1,1,2,2,3,3,4,5,5] arr.reduce((x,y) =>x^y);// 即可得到答案 4 总结:

为了简单起见,为目前为止,所展示的例子都是数值,但数学的计算不是reduce()和reduceRight()唯一意图。这两个函数可以结合其他函数可以达到意想不到的结果,而且在性能上也可能有大提升。

希望大家能提出建议和要求,谢谢!

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

主题: 函数式编程
分页:12
转载请注明
本文标题:js数组方法之Reduce
本站链接:http://www.codesec.net/view/485531.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(25)