浅谈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 EasyUI中对表格进行编辑的实现代码
Jun 10 Javascript
js 判断脚本加载完毕的代码
Jul 13 Javascript
基于jQuery的公告无限循环滚动实现代码
May 11 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
Dec 11 Javascript
jquery高级编程的最佳实践详解
Mar 23 Javascript
chrome下jq width()方法取值为0的解决方法
May 26 Javascript
ionic开发中点击input时键盘自动弹出
Dec 23 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
Feb 19 Javascript
基于easyui checkbox 的一些操作处理方法
Jul 10 Javascript
Vue2.0实现组件数据的双向绑定问题
Mar 06 Javascript
js实现简单掷骰子小游戏
Oct 24 Javascript
JavaScript设计模式之策略模式实现原理详解
May 29 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 set_error_handler()函数使用详解(示例)
2013/11/12 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
JS动态创建元素的两种方法
2016/04/20 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
JavaScript实现的简单Tab点击切换功能示例
2018/07/06 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错
2018/11/06 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
js实现车辆管理系统
2020/08/26 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
python实现2014火车票查询代码分享
2014/01/10 Python
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
简单了解python单例模式的几种写法
2019/07/01 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
python爬虫请求头设置代码
2020/07/28 Python
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
舞蹈教育学专业推荐信
2013/11/27 职场文书
优秀求职信范文分享
2014/01/26 职场文书
班级入场式解说词
2014/02/01 职场文书
主题班会开场白
2015/06/01 职场文书
养成教育主题班会
2015/08/13 职场文书
java代码实现空间切割
2022/01/18 Java/Android