前言
面試遇到一個問題: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腳本,腳本,廣告代碼,jb51.net,www.jb51.net,網" />
<meta name="description" content="www.jb51.net,網,站長必備js特效及廣告代碼。大量高質量js特效,提供高質量廣告代碼下載,盡在網" />
</head>
<body>
<a href="http://www.jb51.net/">網</a>,站長必備的高質量網頁特效和廣告代碼。jb51.net,站長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有所幫助哦,如果有疑問的話歡迎留言討論,小編會及時回復大家的。