分享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 相关文章推荐
实现复选框全选/全不选切换
Dec 23 Javascript
JavaScript中常用的运算符小结
Jan 18 Javascript
完美解决AJAX跨域问题
Nov 01 Javascript
jquery 缓存问题的几个解决方法
Nov 11 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
Feb 20 Javascript
js显示文本框提示文字的方法
May 07 Javascript
angularjs实现过滤并替换关键字小功能
Sep 19 Javascript
详解Vue-axios 设置请求头问题
Dec 06 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
Nov 24 Javascript
小程序新版订阅消息模板消息
Dec 31 Javascript
vue treeselect获取当前选中项的label实例
Aug 31 Javascript
原型和原型链 prototype和proto的区别详情
Nov 02 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
php set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
PHP序列化操作方法分析
2016/09/28 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
jQuery实现的调整表格行tr上下顺序
2016/01/10 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
sqlalchemy对象转dict的示例
2014/04/22 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
群众路线教育实践活动总结
2014/10/30 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
发布会邀请函
2015/01/31 职场文书
地震慰问信
2015/02/14 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android