浅谈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 相关文章推荐
extjs form textfield的隐藏方法
Dec 29 Javascript
jQuery中使用了document和window哪些属性和方法小结
Sep 13 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
Feb 16 Javascript
js清空form表单中的内容示例
May 20 Javascript
浅析JavaScript回调函数应用
May 22 Javascript
深入理解JavaScript中Ajax
Aug 02 Javascript
jquery实现垂直和水平菜单导航栏
Aug 27 Javascript
微信小程序 window_x64环境搭建
Sep 30 Javascript
Angular之指令Directive用法详解
Mar 01 Javascript
VueJs组件prop验证简单介绍
Sep 12 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
Apr 12 Javascript
深入理解Vue的数据响应式
May 15 Vue.js
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制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
php多进程应用场景实例详解
2019/07/22 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
第六章之辅组类与响应式工具
2016/04/25 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
Python获取脚本所在目录的正确方法
2014/04/15 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
PHP面试题集
2016/12/18 面试题
学期自我鉴定
2013/11/04 职场文书
教师年度考核自我鉴定
2014/01/19 职场文书
出纳工作岗位责任制
2014/02/02 职场文书
工资证明格式模板
2015/06/12 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android