分享JS数组求和与求最⼤值的⽅法
前⾔
js数组方法总结⾯试遇到⼀个问题:JS数组求和函数。我第⼀想到的就是数组循环。然⽽我觉得⾯试官问这个问题⼀定不是想考这个⼈⼈皆知的⽅法。当时机智的我竟然想到了递归函数不断加和数组的项,然⽽折腾了好久都没调好⽅法,事实证明这并不是最优解。最后⾯试官问我有没有见过reduce(),真⽊有哇。所以回来查资料,duce()是ES5新增的新属性,相似的还
有duceRight()。
下⽂来总结⼀下数组求和的⽅法。
最粗暴的⽅法:循环获取
通过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的语法:
callback函数接受4个参数:previousValue(上次调⽤回调返回的值)、currentValue(当前被处理的元素)、index(索引)以及数组本⾝(第⼀次调⽤callback的第⼀个参数),执⾏数组中每个值的函数。
initialValue参数可选,表⽰初始值;initialValue参数若指定,则当作最初使⽤的previous值,如果缺省,则使⽤数组的第⼀个元素作为previous初始值,同时current往后排⼀位。
Array.prototype.sum = function (){
duce(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" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>_js数组求和和最⼤值⽅法_⽹</title>
<meta name="keywords" content="站长,⽹页特效,⽹页特效代码,js特效,js脚本,脚本,⼴告代码,jb51,www.jb51,⽹" />
<meta name="description" content="www.jb51,⽹,站长必备js特效及⼴告代码。⼤量⾼质量js特效,提供⾼质量⼴告代码下载,尽在⽹" />
</head>
<body>
<a href="www.jb51/">⽹</a>,站长必备的⾼质量⽹页特效和⼴告代码。jb51,站长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有所帮助哦,如果有疑问的话欢迎留⾔讨论,⼩编会及时回复⼤家的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。