目錄
前言
我們會經常在開發過程中,需要獲取數組中的最大值或者最小值,可以從以下幾個方面考慮:
- 使用
Math.max()
、Math.min()
方法 - 排序之后,獲取最大/最小值
下面我們來看看,如何獲取下面數組的最大值(最小值類似獲取):
let arr = [1, 2, 5, 8, 10, 100, -1]
1. 使用Math的靜態方法max/min
Math.max()
函數返回給定的一組數中的最大值。
它的語法:Math.max(value1[, value2, ...])
使用此方法,需要注意,如果沒有參數的話,則返回-Infinity
。如果有任一參數無法被轉換成數值,則返回NaN
。
1.1 結合ES6的擴展運算符...使用
擴展運算符,可以將數組形式轉換為逗號參數的形式。
Math.max(...arr)
1.2 結合apply/call方法來使用
利用apply()
方法的第一個參數可以改變this的指向,第二個參數是數組的形式,來完成這一需求。
Math.max.apply(null, arr)
既然apply()
方法可以使用,那么我們也可以使用call()
方法,並配合擴展運算符使用。
Math.max.call(null, ...arr)
1.3 結合reduce來使用
reduce()
方法接收一個函數作為累加器,數組中的每一個值(從左到右)開始縮減,最終計算為一個值。
語法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
在這里,這個累加器函數就是getMax()
,比較兩個數,返回其中的最大值,通過這樣的縮減,最后返回整個數組的最大值。
function getMax(prev, next) {
return Math.max(prev, next)
}
arr.reduce(getMax)
2. 排序獲取
2.1 只比較找出最大值
假定數組中的第一個元素值最大max,循環數組,將max與其他元素做比較,大的值賦給max。循環結束之后,max的值即為最大值。
let max = arr[0]
arr.forEach(item => max = item > max ? item : max)
console.log(max) // 100
2.2 將整個數組都排序,獲取最大值
利用array.sort()
方法,指定排序函數,來排序數組。當然,你也可以使用其他排序方式,來排序數組。
let AS = arr.sort((a, b) => a - b)
AS[arr.length-1] // 獲取最大值:100
AS[0] // 獲取最小值: -1
瀏覽器中運行結果
[完]