浅谈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 相关文章推荐
特殊字符、常规符号及其代码对照表
Jun 26 Javascript
javascript 拖动表格行实现代码
May 05 Javascript
关于JavaScript的面向对象和继承有利新手学习
Jan 11 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
Jun 02 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
May 10 Javascript
Bootstrap框架下下拉框select搜索功能
Mar 26 Javascript
jQuery倒计时代码(超简单)
Feb 27 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
Apr 26 Javascript
Vue二次封装axios为插件使用详解
May 21 Javascript
vue中实现Monaco Editor自定义提示功能
Jul 05 Javascript
jQuery实现滑动星星评分效果(每日分享)
Nov 13 jQuery
JavaScript前后端JSON使用方法教程
Nov 23 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 split汉字
2009/06/05 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
php字符串截取函数用法分析
2014/11/25 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
Jquery性能优化详解
2014/05/15 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
ES6 系列之 Generator 的自动执行的方法示例
2018/10/19 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
js布局实现单选按钮控件
2020/01/17 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
python实现360皮肤按钮控件示例
2014/02/21 Python
python简单文本处理的方法
2015/07/10 Python
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
python解析yaml文件过程详解
2019/08/30 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
医院合作意向书范本
2015/05/08 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis