Math.max
方法Math.max
方法不能接收數組,能夠使用ES6的...
將數組打散javascript
const arr = [111, 12, 111, 34, 2, 5, 76]; console.log(Math.max(...arr));
固然也能夠用apply
方法調用java
console.log(Math.max.apply(null, arr));
遍歷數組,依次比較,保存較大的數,最終獲得的就是最大值,這裏使用forEach
遍歷數組
function max2(arr) { let result = -Infinity; arr.forEach((item) => { if (item > result) { result = item; } }); return result; } console.log(max2(arr));
將數組使用sort
方法排序後,第一個元素或最後一個元素就是最大值,再用shift
或者pop
方法取出(由升序仍是降序決定),值得注意的是這兩個方法會修改原數組,能夠使用slice
方法複製一份數組再執行彈出元素操做app
function max3(arr) { return arr.sort((a, b) => a - b).slice().pop(); } console.log(max3(arr));
filter
排除小的值使用filter
函數依次取出<
自身的元素,當取不出元素即返回的函數長度===
零時,就取得了最大值,至於爲何用遞歸不用循環,用IIFE不用先聲明後使用,嗯,就是單純的不想函數
(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
的原理相似,即當全部元素都<=
自己的時候,自己就是最大值學習
(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
code
(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);
前面幾種方法相對比較簡潔,工做中比較經常使用,後邊三種比較適合身子骨比較硬、頭比較鐵的碼農僅供學習、娛樂,切莫當真(狗頭保命)。排序