js獲取數字數組最大值的幾種方式

原生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模擬everycode

(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);

友情提示

前面幾種方法相對比較簡潔,工做中比較經常使用,後邊三種比較適合身子骨比較硬、頭比較鐵的碼農僅供學習、娛樂,切莫當真(狗頭保命)。排序

相關文章
相關標籤/搜索