JavaScript專題系列是本身階段性成長的見證,但願經過文章的形式更加嚴謹、客觀地梳理js的相關知識,也但願可以幫助更多的前端開發的朋友解決問題,期待咱們的共同進步。前端
若是以爲本系列不錯,歡迎點贊、評論、轉發,您的支持就是我堅持的最大動力。es6
取出數組中的最大值和最小值是常見的需求,可是你能想出來多少種方式來實現這種需求呢?數組
JavaScript 提供了Math.max 函數返回一組數中最大值,用法是:微信
Math.max([value1[,value2,...]])
複製代碼
值得注意的是: 一、若是有任意一個參數不能轉化爲數值,則結果爲NaN。 二、max是Math的靜態方法,因此應該這樣使用 Math.max();而不該該做爲Math實例的方法(簡單來講,就是不能使用new) 三、若是沒有參數,則結果爲 -Infinity (注意是負無窮大);閉包
而咱們須要分析的是: 一、若是任意一個參數不能轉換爲數值,這就意味着若是參數能夠被轉換成數字,都是能夠比較的,好比:app
Math.max(true,0) // 1
Math.max(true,'2',null) // 2
Math.max(1,undefined) // NaN --> undefined 不能轉化爲數值
Math.max(1,{}) // NaN
複製代碼
二、若是沒有參數,則結果爲 -Infinity 對應的 Math.min 函數 若是沒有參數則結果爲 Infinity 因此:函數
var min = Math.min();
var max = Math.max();
consoele.log(min>max);
複製代碼
最原始的方式,就是循環遍歷一遍。post
var arr = [6,4,1,8,2,11,23];
var result = arr[0];
for(var i = 1;i<arr.length;i++){
result = Math.max(result,arr[i])
}
console.log(result);
複製代碼
既然是經過遍歷數組求出一個最終的值,那麼咱們就可使用reduce方法:學習
var arr = [6,4,1,8,2,11,23];
function max(prev,next){
return Math.max(prev,next);
}
console.log(arr.reduce(max));
複製代碼
若是咱們先對數組進行一次排序,那麼最大的值就是最後一個值:ui
var arr = [6,4,1,8,2,11,23];
arr.sort(function(a,b){
return a - b;
})
console.log(arr[arr.length-1]);
複製代碼
Math.max 支持傳遞多個參數來進行比較,那麼咱們如何將一個數組轉換爲參數傳遞進去Math.max函數呢?eval即是一種
var arr = [6,4,1,8,2,11,23];
var max = eval("Math.max("+ arr +)");
console.log(max);
複製代碼
使用apply 是另一種
var arr = [6,4,1,8,2,11,23];
console.log(Math.max.apply(null,arr));
複製代碼
使用es6的擴展運算符
var arr = [6,4,1,8,2,11,23];
console.log(Math.max(...arr));
複製代碼
歡迎添加個人我的微信討論技術和個體成長。
歡迎關注個人我的微信公衆號——指尖的宇宙,更多優質思考乾貨