分享JS数组求和与求最大值的方法


Posted in Javascript onAugust 11, 2016

前言

面试遇到一个问题:JS数组求和函数。我第一想到的就是数组循环。然而我觉得面试官问这个问题一定不是想考这个人人皆知的方法。当时机智的我竟然想到了递归函数不断加和数组的项,然而折腾了好久都没调好方法,事实证明这并不是最优解。最后面试官问我有没有见过reduce(),真木有哇。所以回来查资料,Array.reduce()是ES5新增的新属性,相似的还有Array.reduceRight()。

下文来总结一下数组求和的方法。

最粗暴的方法:循环获取

通过for循环一项项地加和。看代码:

Array.prototype.sum = function (){
 var result = 0;
 for(var i = 0; i < this.length; i++) {
  result += this[i];
 }
 return result;
};

[1,4,7,2,10].sum(); // 24

使用reduce方法

利用reduce方法,可以写一个数组求和的sum方法。

reduce()方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终为一个值。

reduce的语法:

array.reduce(callback[, initialValue]);

callback函数接受4个参数:previousValue(上次调用回调返回的值)、currentValue(当前被处理的元素)、index(索引)以及数组本身(第一次调用 callback的第一个参数),执行数组中每个值的函数。

initialValue参数可选,表示初始值;initialValue参数若指定,则当作最初使用的previous值,如果缺省,则使用数组的第一个元素作为previous初始值,同时current往后排一位。

Array.prototype.sum = function (){
 return this.reduce(function (partial, value){
  return partial + value;
 })
};
[1,4,7,2,10].sum(); // 24

相比第一种方法,使用reduce()方法的效率更高。

这两种方法的效率比较可以直接在函数运行前后分别调用new Date()获取即时时间,从而通过时间差比较执行时间。这里就不比较了,因为每个人的执行环境差异较大。测试结果是reduce()方法的执行时间更短。

JS数组求和函数,并求出数组中的最大值

实例代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>三水点靠木_js数组求和和最大值方法_三水点靠木网</title>

<meta name="keywords" content="站长,网页特效,网页特效代码,js特效,js脚本,脚本,广告代码,3water.com,3water.com,三水点靠木网" />

<meta name="description" content="3water.com,三水点靠木网,站长必备js特效及广告代码。大量高质量js特效,提供高质量广告代码下载,尽在三水点靠木网" />

</head>

<body>

<a href="https://3water.com/">三水点靠木网</a>,站长必备的高质量网页特效和广告代码。3water.com,站长js特效。<hr>

<script type="text/javascript">

//求和

Array.prototype.sum = function () {

 for (var sum = i = 0; i < this.length; i++)sum += parseInt(this[i]);

  return sum ;

};

//求最大值

Array.prototype.maxima = function () {

 for (var i = 0, maxValue = Number.MIN_VALUE; i < this.length; i++)parseInt(this[i]) > maxValue && (maxValue = this[i]);

 return maxValue;

};

//应用

var arr = [1,21,3,4,22,45,60,7,32];

alert(arr.join("+") + "=" + arr.sum()); alert(arr.join("|") + "中, 最大的数是:" + arr.maxima());

</script>

</body>

</html>

以上就是本文的全部内容,希望对大家使用JavaScript有所帮助哦,如果有疑问的话欢迎留言讨论,小编会及时回复大家的。

Javascript 相关文章推荐
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
Nov 15 Javascript
利用window.name实现windowStorage代码分享
Jan 02 Javascript
javascript判断chrome浏览器的方法
Mar 26 Javascript
JS 弹出层 定位至屏幕居中示例
May 21 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
Feb 27 Javascript
js实现的简练高效拖拽功能示例
Dec 21 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
Dec 28 Javascript
Vue 进阶教程之v-model详解
May 06 Javascript
gulp安装以及打包合并的方法教程
Nov 19 Javascript
小程序实现左右来回滚动字幕效果
Dec 28 Javascript
JavaScript 性能提升之路(推荐)
Apr 10 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
Aug 28 Javascript
利用JavaScript阻止表单提交的两种方法
Aug 11 #Javascript
防止Node.js中错误导致进程阻塞的办法
Aug 11 #Javascript
JavaScript中 ES6 generator数据类型详解
Aug 11 #Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
Aug 11 #Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
Aug 11 #Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
Aug 11 #Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
Aug 11 #Javascript
You might like
php笔记之:文章中图片处理的使用
2013/04/26 PHP
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
js电话号码验证方法
2015/09/28 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
pandas的object对象转时间对象的方法
2018/04/11 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
基于python实现把图片转换成素描
2019/11/13 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
介绍下Lucene建立索引的过程
2016/03/02 面试题
生产内勤岗位职责
2013/12/07 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
高中班主任评语
2014/12/30 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书