浅谈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 相关文章推荐
用JavaScript显示随机图像或引用
Apr 21 Javascript
javascript同页面多次调用弹出层具体实例代码
Aug 16 Javascript
使用jQuery避免鼠标双击的解决方案
Aug 21 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
Jan 24 Javascript
jquery中append()与appendto()用法分析
Nov 14 Javascript
JavaScript的jQuery库中ready方法的学习教程
Aug 14 Javascript
js动态生成Html元素实现Post操作(createElement)
Sep 14 Javascript
js老生常谈之this,constructor ,prototype全面解析
Apr 05 Javascript
Vue.js开发环境搭建
Nov 10 Javascript
微信小程序动态增加按钮组件
Sep 14 Javascript
Vuex的基本概念、项目搭建以及入坑点
Nov 04 Javascript
js中的reduce()函数讲解
Jan 18 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学习之正则表达式
2011/04/17 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
jQuery 操作XML入门
2008/12/25 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
Python实现多行注释的另类方法
2014/08/22 Python
十条建议帮你提高Python编程效率
2016/02/16 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
深入浅析Python中的yield关键字
2018/01/24 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
国际商务专业学生个人的自我评价
2013/09/28 职场文书
2014年保洁工作总结
2014/11/24 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL