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);
前面几种方法相对比较简洁,工做中比较经常使用,后边三种比较适合身子骨比较硬、头比较铁的码农仅供学习、娱乐,切莫当真(狗头保命)。排序