JavaScript 在Array中取得最大(小)值的三種辦法

前言

前陣子在寫題目的時候 – LeetCode #300 Longest Increasing Subsequence ,要取得 JS 中一個陣列的最大值

卻發現比起 C# 的 LINQ、Java 的Stream以及Python3 本來就挺萬能的max函數而言

大家對於 JS 的印象可能還停留在 for 去比較

那今天就讓我們來統整一下三種不同的方法去取得陣列中的最大(小)值吧

解決方法

方法 1 – for loop

const arr = [12,20,8,44,31];
const max = arr[0];
for(let i=1; i<arr.length; i++){
    if(arr[i]>max){
        max = arr[i];
    }
}

肯定是大家最常用的寫法吧,將陣列的第一個當作最大(小)值,並在 for loop裡面逐個判斷

在不支援ES6的時候,也只能用這個做法了,記得將const、let 改為var (兩者均是ES6的寫法)

方法 2 – Array.reduce

const arr = [12,20,8,44,31];
const max = arr.reduce((max, current) => {
    return current > max ? current : max;
}, arr[0]);

ES6 的 reduce語法,可以進行迭代的運算,最後的則是設定初始值(不過其實不提供,也會用陣列的第一個當成預設值)

如果需要詳細的介紹,之前專門寫過一篇文章,還請移駕 ➡ JavaScript Array reduce()教學 – 簡化你的迭代程式碼

方法 3 – Spread Operator 搭配Math.Max

const arr = [12,20,8,44,31];
const max = Math.max(...arr);

最短的寫法,用的是ES6才支援的 Spread Operator …

主要的概念就是會將陣列展開為一個一個的元素並當作參數傳入 Math.Max

然後因為 Math.max語法支援傳入N個參數,故可以如此搭配來使用


結論

主要範例都是用取得最大值的寫法,相信大家可以自己改寫成最小值的

寫了幾年程式,卻發現前端JS ES6有很多相當方便的語法沒去研究到,真的是有點可惜

另外,最近在研究資安的CTF,有機會希望可以跟大家分享

參考資料

🧡希望這篇文章有提供一點幫助~

🧡幫我點一個小小的廣告或留言,都是對我的支持!

⭐如有任何疑問,歡迎透過留言或messenger讓我知道 !

🍽️另外,徵求任何合作機會(不管是業配、廣告或是友站連結)

看看一些其他的筆記吧

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *