1.原生Math.max方法
Math.max
方法不能接收數組,可以使用ES6的...
將數組打散
const arr = [111, 12, 111, 34, 2, 5, 76];
console.log(Math.max(...arr));
也可以用apply
方法調用
console.log(Math.max.apply(null, arr));
2.forEach
遍歷獲取最大值
遍歷數組,依次比較,保存較大的數,最終得到的就是最大值
function max2(arr) { let result = -Infinity; arr.forEach((item) => { if (item > result) { result = item; } }); return result; } console.log(max2(arr));
3.sort排序獲取最大值
將數組使用sort
方法排序后,第一個元素或最后一個元素就是最大值,再用shift
或者pop
方法取出(由升序還是降序決定),值得注意的是這兩個方法會修改原數組,可以使用slice
方法復制一份數組再執行彈出元素操作
function max3(arr) { return arr.sort((a, b) => a - b).slice().pop(); } console.log(max3(arr));
4.filter排除小的值
使用filter
函數依次取出 <
自身的元素,當取不出元素即返回的函數長度 ===
零時,就取得了最大值
(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);
5.使用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);
6.使用遞歸模擬數組方法
和上面兩個方法類似,只是內層用了遞歸和IIFE模擬every
(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);