1. 程式人生 > >js獲取數字陣列最大值的幾種方式

js獲取數字陣列最大值的幾種方式

## 原生```Math.max```方法 ```Math.max``` 方法不能接收陣列,可以使用ES6的```...```將陣列打散 ```javascript const arr = [111, 12, 111, 34, 2, 5, 76]; console.log(Math.max(...arr)); ``` 當然也可以用```apply```方法呼叫 ```javascript console.log(Math.max.apply(null, arr)); ``` ## 遍歷獲取最大值 遍歷陣列,依次比較,儲存較大的數,最終得到的就是最大值,這裡使用```forEach```遍歷 ```javascript function max2(arr) { let result = -Infinity; arr.forEach((item) => { if (item > result) { result = item; } }); return result; } console.log(max2(arr)); ``` ## 利用排序獲取最大值 將陣列使用```sort```方法排序後,第一個元素或最後一個元素就是最大值,再用```shift```或者```pop```方法取出(由升序還是降序決定),值得注意的是這兩個方法會修改原陣列,可以使用```slice```方法複製一份陣列再執行彈出元素操作 ```javascript function max3(arr) { return arr.sort((a, b) => a - b).slice().pop(); } console.log(max3(arr)); ``` ## 使用```filter```排除小的值 使用```filter```函式依次取出```<```自身的元素,當取不出元素即返回的函式長度```===```零時,就取得了最大值,至於為什麼用遞迴不用迴圈,用IIFE不用先聲明後使用,嗯,就是單純的不想 ```javascript (function greater(arr, idx) { const res = arr.filter(item => item > arr[idx]); if (res.length === 1) { console.log(res[0]); return res[0]; } greater(arr, idx + 1); })(arr, 0); ``` ## 使用```every```判斷自己是否是最大值 使用```every```的原理和使用```filter```的原理類似,即當所有元素都```<=```本身的時候,本身就是最大值 ```javascript (function greater(arr, idx) { if (arr.every(item => item <= arr[idx])) { console.log(arr[idx]); return arr[idx]; } greater(arr, idx + 1); })(arr, 0); ``` ## 使用遞迴模擬陣列方法 和上面兩個方法類似,只是內層用了遞迴和IIFE模擬```every``` ```javascript (function outer(arr, i) { let flag = function inner(arr, j) { if (arr[j] <= arr[i]) { return false; } return arr.length < j + 1 ? inner(arr, j + 1) : true; }(arr, 0); if (flag) { console.log(arr[i - 1]); return arr[i - 1]; } outer(arr, i + 1); })(arr, 0); ``` ## 友情提示 前面幾種方法相對比較簡潔,工作中比較常用,後邊三種~~比較適合身子骨比較硬、頭比較鐵的碼農~~僅供學習、娛樂,切莫當真(狗頭保