浅谈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 相关文章推荐
js不是基础的基础
Dec 24 Javascript
jQuery源码分析之Event事件分析
Jun 07 Javascript
js列举css中所有图标的实现代码
Jul 04 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
Feb 03 Javascript
利用进制转换压缩数字函数分享
Jan 02 Javascript
jquery sortable的拖动方法示例详解
Jan 16 Javascript
input输入密码变黑点密文的实现方法
Jan 09 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
Aug 25 Javascript
angular.js实现购物车功能
Oct 23 Javascript
vue中的计算属性的使用和vue实例的方法示例
Dec 04 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
Feb 10 Javascript
vue 组件简介
Jul 31 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中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
PHP中图片等比缩放的实例
2013/03/24 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
动态调用css文件——jquery的应用
2007/02/20 Javascript
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
prettify 代码高亮着色器google出品
2010/12/28 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
详解Webpack实战之构建 Electron 应用
2017/12/25 Javascript
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
python实现批量监控网站
2016/09/09 Python
python中os模块详解
2016/10/14 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
Python同时处理多个异常的方法
2020/07/28 Python
美国购车网站:TrueCar
2016/10/19 全球购物
十佳美德少年事迹材料
2014/02/05 职场文书
法律进企业活动方案
2014/03/04 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers