紀錄工作經驗、相關知識,解決技術相關問題。

Javascript, jQuery, React, 新手 Jamp Holes, 未分類, 網站相關, 資訊相關

JS 陣列取得最大值 / 最小值的5種方法與注意事項

在 JavaScript 中操作陣列時,取得最大值和最小值是非常常見的需求。這篇文章將給出幾種對不同情境下的解決方案,幫助你在實作中選擇最適合的方式。

1. 手工轉循環 (最簡單)

最簡單的作法,通過一個轉循環進行比較,完全控制每步操作。

const numbers = [10, 5, 8, 12, 3];

let max = -Infinity;
let min = Infinity;

for (const num of numbers) {
  if (num > max) max = num;
  if (num < min) min = num;
}

console.log(`Max: ${max}, Min: ${min}`); // Max: 12, Min: 3

雖然此方法明確而直接,且不容易有額外錯誤。

2. 使用 Math.max.applyMath.min.apply(最方便)

另一種經典的用法是使用 apply,將陣列傳入 Math.maxMath.min

const numbers = [10, 5, 8, 12, 3];
const max = Math.max.apply(null, numbers);
const min = Math.min.apply(null, numbers);

console.log(`Max: ${max}, Min: ${min}`); // Max: 12, Min: 3

這種方法在舊版瀏覽器中可能更具相容性,相較於使用 Math.max(…numbers) 更不容易出錯,較為推薦使用。

3. 使用 Math.maxMath.min (最基礎方法,注意相容性)

在 JavaScript 中,Math.maxMath.min 是常用方法,通過將參數使用 …在 Math中展開來實踐。

const numbers = [10, 5, 8, 12, 3];
const max = Math.max(...numbers);
const min = Math.min(...numbers);

console.log(`Max: ${max}, Min: ${min}`); // Max: 12, Min: 3

使用擴展過程,可以讓數值陣列傳入這些方法作為個別值。

但要注意,這種作法不一定完全正確,實作上,可能因相容性問題,導致程式錯誤中斷的狀況,所以需要多留意。

4. 使用 reduce

使用 reduce 方法可以對陣列進行比較,以取得最大值和最小值。

const numbers = [10, 5, 8, 12, 3];

const max = numbers.reduce((a, b) => Math.max(a, b));
const min = numbers.reduce((a, b) => Math.min(a, b));

console.log(`Max: ${max}, Min: ${min}`); // Max: 12, Min: 3

此方法對大量資料的操作也非常優化。

注意:使用 reduce,在可讀性上比較差,與使用 forEach 相比,reduce 較耗效能,雖然單一對比上,感覺不太出來,但要留意大量使用 or 複雜度較高的情境下,有機會導致效能偏低或可讀性差,造成後續維護困難。

5. 使用排序 (需要暫存操作)

使用 sort 對陣列排序,最大值在最後,最小值在最前。

const numbers = [10, 5, 8, 12, 3];

const sorted = [...numbers].sort((a, b) => a - b);
const min = sorted[0];
const max = sorted[sorted.length - 1];

console.log(`Max: ${max}, Min: ${min}`); // Max: 12, Min: 3

但注意,此方法會使用暫存來複製陣列。

對於資料整理中,如果你是需要先將資料進行清整,這不失為一個方便的做法。

結論

上述法法都可以解決 JavaScript 中取得陣列最大值和最小值的需求。根據你的情境,可以選擇最適合的方案,希望這些方法對你有所幫助!

發表迴響