js获取数字数组最大值的几种方式

原生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);

友情提示

前面几种方法相对比较简洁,工作中比较常用,后边三种比较适合身子骨比较硬、头比较铁的码农仅供学习、娱乐,切莫当真狗头保命)。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注