浅谈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 相关文章推荐
jquery遍历input取得input的name
Apr 27 Javascript
javascript对select标签的控制(option选项/select)
Jan 31 Javascript
jQuery 快速结束当前正在执行的动画
Nov 20 Javascript
Javascript学习笔记之数组的构造函数
Nov 23 Javascript
JavaScript设计模式之适配器模式介绍
Dec 28 Javascript
javascript入门教程基础篇
Nov 16 Javascript
JavaScript 不支持 indexof 该如何解决
Mar 30 Javascript
jQuery按需加载轮播图(web前端性能优化)
Feb 17 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
Aug 15 jQuery
Angular学习教程之RouterLink花式跳转
May 03 Javascript
详解webpack-dev-server使用方法
Sep 14 Javascript
深入浅析javascript函数中with
Oct 28 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
PHP6 先修班 JSON实例代码
2008/08/23 PHP
php通过字符串调用函数示例
2014/03/02 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
javascript中clone对象详解
2014/12/03 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
JS实现的验证身份证及获取地区功能示例
2017/01/16 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
vue实现侧边栏导航效果
2019/10/21 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
Python 26进制计算实现方法
2015/05/28 Python
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
python的常用模块之collections模块详解
2018/12/06 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
企划专员岗位职责
2013/12/09 职场文书
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers