如何求數組的最大值和最小值


前言

取出數組中的最大值或者最小值是開發中常見的需求,但你能想出幾種方法來實現這個需求呢?

Math.max

JavaScript 提供了 Math.max 函數返回一組數中的最大值,用法是:

Math.max([value1[,value2, ...]])

值得注意的是:

  1. 如果有任一參數不能被轉換為數值,則結果為 NaN。
  2. max 是 Math 的靜態方法,所以應該像這樣使用:Math.max(),而不是作為 Math 實例的方法 (簡單的來說,就是不使用 new )
  3. 如果沒有參數,則結果為 -Infinity (注意是負無窮大)

而我們需要分析的是:

1.如果任一參數不能被轉換為數值,這就意味着如果參數可以被轉換成數字,就是可以進行比較的,比如:

Math.max(true, 0) // 1 Math.max(true, '2', null) // 2 Math.max(1, undefined) // NaN Math.max(1, {}) // NaN

2.如果沒有參數,則結果為 -Infinity,對應的,Math.min 函數,如果沒有參數,則結果為 Infinity,所以:

var min = Math.min(); var max = Math.max(); console.log(min > max);

了解了 Math.max 方法,我們以求數組最大值的為例,思考有哪些方法可以實現這個需求。

原始方法

最最原始的方法,莫過於循環遍歷一遍:

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));

排序

如果我們先對數組進行一次排序,那么最大值就是最后一個值:

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))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM