分享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通过ajax加载一段文本内容的方法
Jan 15 Javascript
location.hash保存页面状态的技巧
Apr 28 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
May 22 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
Jul 20 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
Apr 23 Javascript
关于layui toolbar和template的结合使用方法
Sep 19 Javascript
layui switch 开关监听 弹出确定状态转换的例子
Sep 21 Javascript
React Hooks 实现和由来以及解决的问题详解
Jan 17 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
Mar 10 Javascript
基于VSCode调试网页JavaScript代码过程详解
Jul 20 Javascript
在vue中axios设置timeout超时的操作
Sep 04 Javascript
ant design pro中可控的筛选和排序实例
Nov 17 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下连接mssql2005的代码
2011/01/17 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
PHP7新特性简述
2017/06/11 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
2017/07/04 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
网络妈妈观后感
2015/06/08 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
解除租赁合同协议书
2016/03/21 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
Python连续赋值需要注意的一些问题
2021/06/03 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python