前言
面試遇到一個問題: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>php中文网_js数组求和和最大值方法_php中文网</title> <meta name="keywords" content="站长,网页特效,网页特效代码,js特效,js脚本,脚本,广告代码,php.cn,www.php.cn,php中文网" /> <meta name="description" content="www.php.cn,php中文网,站长必备js特效及广告代码。大量高质量js特效,提供高质量广告代码下载,尽在php中文网" /> </head> <body> <a href="http://www.php.cn/">php中文网<</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有所幫助哦,如果有疑問的話留言討論,小編會及時回覆大家的。
更多分享JS數組求和與求最大值的方法相關文章請關注PHP中文網!