分享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 相关文章推荐
点击文章内容处弹出页面代码
Oct 01 Javascript
JS中 用户登录系统的解决办法
Apr 15 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
Jun 21 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
Jul 22 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
Aug 23 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
Sep 16 Javascript
如何使用angularJs
May 08 Javascript
vue.js 使用axios实现下载功能的示例
Mar 05 Javascript
node中的密码安全(加密)
Sep 17 Javascript
详解在HTTPS 项目中使用百度地图 API
Apr 26 Javascript
layui树形菜单动态遍历的例子
Sep 23 Javascript
js用正则表达式筛选年月日的实例方法
Jan 04 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实现模仿socket请求返回页面的方法
2014/11/04 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
PHP利用imagick生成组合缩略图
2016/02/19 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
IE中createElement需要注意的一个问题
2010/07/13 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
Python文本相似性计算之编辑距离详解
2016/11/28 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
什么是数据抽象
2016/11/26 面试题
校园安全广播稿
2014/02/08 职场文书
节能减耗标语
2014/06/21 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript
总结一些Java常用的加密算法
2021/06/11 Java/Android