原生Math.max
方法
Math.max
方法不能接收数组,可以使用ES6的...
将数组打散
const arr = [111, 12, 111, 34, 2, 5, 76];
console.logMath.max...arr));
当然也可以用apply
方法调用
console.logMath.max.applynull, arr));
遍历获取最大值
遍历数组,依次比较,保存较大的数,最终得到的就是最大值,这里使用forEach
遍历
function max2arr) {
let result = -Infinity;
arr.forEachitem) => {
if item > result) {
result = item;
}
});
return result;
}
console.logmax2arr));
利用排序获取最大值
将数组使用sort
方法排序后,第一个元素或最后一个元素就是最大值,再用shift
或者pop
方法取出(由升序还是降序决定),值得注意的是这两个方法会修改原数组,可以使用slice
方法复制一份数组再执行弹出元素操作
function max3arr) {
return arr.sorta, b) => a - b).slice).pop);
}
console.logmax3arr));
使用filter
排除小的值
使用filter
函数依次取出<
自身的元素,当取不出元素即返回的函数长度===
零时,就取得了最大值,至于为什么用递归不用循环,用IIFE不用先声明后使用,嗯,就是单纯的不想
function greaterarr, idx) {
const res = arr.filteritem => item > arr[idx]);
if res.length === 1) {
console.logres[0]);
return res[0];
}
greaterarr, idx + 1);
})arr, 0);
使用every
判断自己是否是最大值
使用every
的原理和使用filter
的原理类似,即当所有元素都<=
本身的时候,本身就是最大值
function greaterarr, idx) {
if arr.everyitem => item <= arr[idx])) {
console.logarr[idx]);
return arr[idx];
}
greaterarr, idx + 1);
})arr, 0);
使用递归模拟数组方法
和上面两个方法类似,只是内层用了递归和IIFE模拟every
function outerarr, i) {
let flag = function innerarr, j) {
if arr[j] <= arr[i]) {
return false;
}
return arr.length < j + 1 ? innerarr, j + 1) : true;
}arr, 0);
if flag) {
console.logarr[i - 1]);
return arr[i - 1];
}
outerarr, i + 1);
})arr, 0);
友情提示
前面几种方法相对比较简洁,工作中比较常用,后边三种比较适合身子骨比较硬、头比较铁的码农仅供学习、娱乐,切莫当真狗头保命)。