分享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 相关文章推荐
javascript编程起步(第二课)
Jan 10 Javascript
js下用gb2312编码解码实现方法
Dec 31 Javascript
javascript为下拉列表动态添加数据项
May 23 Javascript
jquery实现用户打分评分特效
May 28 Javascript
简单谈谈javascript中this的隐式绑定
Feb 22 Javascript
JS实现设置ff与ie元素绝对位置的方法
Mar 08 Javascript
vue.js删除动态绑定的radio的指定项
Jun 02 Javascript
JS滚动到指定位置导航栏固定顶部
Jul 03 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
Dec 01 Javascript
vue移动UI框架滑动加载数据的方法
Mar 12 Javascript
对 Vue-Router 进行单元测试的方法
Nov 05 Javascript
关于vue组件事件属性穿透详解
Oct 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异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
用javascript连接access数据库的方法
2006/11/17 Javascript
JavaScipt基本教程之前言
2008/01/16 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
python中bytes和str类型的区别
2019/10/21 Python
Python生成词云的实现代码
2020/01/14 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
Python模块常用四种安装方式
2020/10/20 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
机械制造专业个人的自我评价
2013/12/28 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
大队委竞选演讲稿
2014/04/28 职场文书
投标保密承诺书
2014/05/19 职场文书
工厂标语大全
2014/10/06 职场文书
python Tkinter的简单入门教程
2021/04/11 Python
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
python字典的元素访问实例详解
2021/07/21 Python
Django框架之路由用法
2022/06/10 Python
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle