浅谈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.Validate验证库的使用介绍
Apr 26 Javascript
jQuery原生的动画效果
Jul 10 Javascript
js实现仿Discuz文本框弹出层效果
Aug 13 Javascript
jquery实现图片水平滚动效果代码分享
Aug 26 Javascript
JS实现仿QQ效果的三级竖向菜单
Sep 25 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
Dec 02 Javascript
基于jQuery日历插件制作日历
Mar 11 Javascript
Vue中保存用户登录状态实例代码
Jun 07 Javascript
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
Aug 12 Javascript
微信小程序中target和currentTarget的区别小结
Nov 06 Javascript
在elementui中Notification组件添加点击事件实例
Nov 11 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
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
简单理解Python中的装饰器
2015/07/31 Python
python编程开发之日期操作实例分析
2015/11/13 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
python中数字是否为可变类型
2020/07/08 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
Python 如何创建一个线程池
2020/07/28 Python
python如何运行js语句
2020/09/09 Python
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
英国家庭和商业健身器材购物网站:Fitness Options
2018/07/05 全球购物
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
美国眼镜在线零售商:Dualens
2019/12/07 全球购物
大学生文员专业个人求职信范文
2014/01/05 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
财务部绩效考核方案
2014/05/04 职场文书
项目建议书怎么写
2014/05/15 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
高中社区服务活动报告
2015/02/05 职场文书
公司人力资源管理制度
2015/08/05 职场文书
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android