JavaScript專題之如何求出數組的最大值和最小值

JavaScript專題系列是本身階段性成長的見證,但願經過文章的形式更加嚴謹、客觀地梳理js的相關知識,也但願可以幫助更多的前端開發的朋友解決問題,期待咱們的共同進步。前端

若是以爲本系列不錯,歡迎點贊、評論、轉發,您的支持就是我堅持的最大動力。es6


前言

取出數組中的最大值和最小值是常見的需求,可是你能想出來多少種方式來實現這種需求呢?數組

Math.max

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

既然是經過遍歷數組求出一個最終的值,那麼咱們就可使用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]);
複製代碼

eval

Math.max 支持傳遞多個參數來進行比較,那麼咱們如何將一個數組轉換爲參數傳遞進去Math.max函數呢?eval即是一種

var arr = [6,4,1,8,2,11,23];
var max = eval("Math.max("+ arr +)");
console.log(max);
複製代碼

apply

使用apply 是另一種

var arr = [6,4,1,8,2,11,23];
console.log(Math.max.apply(null,arr));
複製代碼

ES6

使用es6的擴展運算符

var arr = [6,4,1,8,2,11,23];
console.log(Math.max(...arr));
複製代碼

深刻學習JavaScript系列目錄

歡迎添加個人我的微信討論技術和個體成長。

歡迎關注個人我的微信公衆號——指尖的宇宙,更多優質思考乾貨

相關文章
相關標籤/搜索