浅谈javascript 归并方法


Posted in Javascript onJanuary 21, 2015

ECMAScript5为数组定义了2个归并方法:reduce()和reduceRight()。这两个方法都会迭代数组的随意项,然后构建一个最终返回的值。reduce()方法从数组的第一项开始,逐个遍历到数组的最后。reduceRight()方法则刚好相反,它从数组的最后一项开始,向前遍历到第一项。

这两个方法都接收两个参数:一个在每一项上调用的函数和作为归并基础的初始值。传给reduce()和reduceRight()的函数接收4个参数:前一个值,当前值,项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项。

例如,我们可以使用reduce()方法来求数组中所有值的总和。

var nums = [1,2,3,4,5];
var sum = nums.reduce(function(prev,cur,index,array){
 retrun pre + cur;
});

上面的代码中,第一次执行回调函数,prev是1,cur是2。第二次prev是3,cur是3。reduce()方法会重复这个过程,直到把数组中的每一项都访问一次,最后将返回的结果赋值给sum。

reduceRight()方法的左右类似,只不过是反向执行。例如:

var nums = [1,2,3,4,5];
var sum = nums.reduceRight(function(prev,cur,index,array){
 retrun pre + cur;
});

这个例子中,第一次执行回调函数,prev是5,cur是4。最后求和的结果和reduce()方法相同,都是15。

支持reduce()和reduceRight()的浏览器有:IE9+,Firefox3+,Safari4+,Opeera10.5+和Chrome。

补充

ECMAScript5 还新增了2个归并数组的方法:reduce()和reduceRight()。

 这两个都会迭代数组的所有项
        reduce():从第一项开始逐个遍历到最后。
        reduceRight():从数组的最后一项开始,遍历到数组的第一项。

这两个方法都接受两个参数:在每一项上调用的函数(参数为:前一个值,当前值,项的索引,数组对象)

 这个函数返回的任何值斗殴会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,
         因此第一个参数是数组的第一项,第二个参数是数组的第二项
         和 作为归并基础的初始值。
        使用reduce()方法可以执行数组中所有值之和的操作,比如:

var values = [1, 2, 3, 4, 5];
    var sum = values.reduce(function (prev, cur, index, array) {
      return prev + cur;
    });
    alert(sum);
    //结果一样,只是方向相反而已
    var sum2=values.reduceRight(function (prev,cur,index,array) {
      return prev+cur;
    });
    alert(sum2);

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。

Javascript 相关文章推荐
使用IE的地址栏来辅助调试Web页脚本
Mar 08 Javascript
层序遍历在ExtJs的TreePanel中的应用
Oct 16 Javascript
JavaScript EasyPager 分页函数
May 25 Javascript
JavaScript DOM节点添加示例
Jul 16 Javascript
jquery图片切换实例分析
Apr 15 Javascript
JS模拟实现方法重载示例
Aug 03 Javascript
jQuery实现的导航下拉菜单效果示例
Sep 05 Javascript
深入了解JavaScript的逻辑运算符(与、或)
Dec 20 Javascript
JS简单实现获取元素的封装操作示例
Apr 07 Javascript
关于webpack2和模块打包的新手指南(小结)
Aug 07 Javascript
浅谈vue+webpack项目调试方法步骤
Sep 11 Javascript
bootstrap-table formatter 使用vue组件的方法
May 09 Javascript
JS获取时间的方法
Jan 21 #Javascript
javascript中数组的定义及使用实例
Jan 21 #Javascript
html的DOM中document对象anchors集合用法实例
Jan 21 #Javascript
javascript 获取浏览器版本
Jan 21 #Javascript
javascript 实现 原路返回
Jan 21 #Javascript
html的DOM中document对象forms集合用法实例
Jan 21 #Javascript
浅谈javascript 函数内部属性
Jan 21 #Javascript
You might like
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
PHP cdata 处理(详细介绍)
2013/07/05 PHP
WordPress中使主题支持小工具以及添加插件启用函数
2015/12/22 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
jQuery DOM操作小结与实例
2010/01/07 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
Juery解决tablesorter中文排序和字符范围的方法
2015/05/06 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
python实现逆波兰计算表达式实例详解
2015/05/06 Python
Python实现调度算法代码详解
2017/12/01 Python
详解python中的 is 操作符
2017/12/26 Python
python3图片文件批量重命名处理
2019/10/31 Python
浅析Python迭代器的高级用法
2020/07/16 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
安全生产检讨书
2014/01/21 职场文书
小学教师听课制度
2014/02/01 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
比赛口号霸气押韵
2015/12/24 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
Python+Appium自动化测试的实战
2021/06/30 Python