分享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的继承的封装介绍
Oct 15 Javascript
基于jQuery+JSON的省市二三级联动效果
Jun 05 Javascript
JavaScript中用于生成随机数的Math.random()方法
Jun 15 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
Oct 28 Javascript
jQuery 生成svg矢量二维码
Aug 09 Javascript
node.js文件上传处理示例
Oct 27 Javascript
学习vue.js条件渲染
Dec 03 Javascript
javascript防篡改对象实例详解
Apr 10 Javascript
利用require.js与angular搭建spa应用的方法实例
Jul 19 Javascript
angularjs中判断ng-repeat是否迭代完的实例
Sep 12 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
深入了解Vue3模板编译原理
Nov 19 Vue.js
利用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
是否存在第一台收音机的说法
2021/03/01 无线电
Laravel 5框架学习之环境与配置
2015/04/08 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
jQuery之排序组件的深入解析
2013/06/19 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
JS运动基础框架实例分析
2015/03/03 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
2018/04/27 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
vue封装swiper代码实例解析
2019/10/08 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
[05:24]TI9采访——教练
2019/08/24 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
tornado 多进程模式解析
2018/01/15 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
文明演讲稿范文
2014/05/12 职场文书
2014年班务工作总结
2014/12/02 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
综合素质评价个性与发展自我评价
2015/03/06 职场文书
停电放假通知
2015/04/14 职场文书
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript