JavaScript >> Javascript 文檔 >  >> JavaScript

JavaScript:獲取數組的最小和最大元素

簡介

在使用 JavaScript 時,我們經常會遇到需要獲取數組的最小和最大元素的情況——無論是為滑塊設置邊界還是向用戶顯示統計信息。

如何使用 Math 獲取數組的最小和最大元素 對象

Math 是 JavaScript 內置的全局便利對象,其中包含執行數學運算時可能需要的許多方法和常量。我們將在本文中使用的兩種方法是 Math.min()Math.max() - 他們都接受一個數字列表作為參數。顧名思義,一個返回值最低的元素,另一個返回值最高的元素:

console.log(Math.min(20, 23, 27)); // 20
console.log(Math.max(20, 23, 27)); // 27

console.log(Math.min(-20, -23, -27)); // -27
console.log(Math.max(-20, -23, -27)); // -20

如果至少有一個傳遞的元素不是數字或不能轉換為數字,則 Math.min()Math.max() 返回 NaN

console.log(Math.min('-20', -23, -27)); // -27
console.log(Math.max('number', -23, -27)); // NaN

同樣,如果我們嘗試將數組作為 Math.min() 的參數傳遞 函數,我們得到一個 NaN ,因為它被視為單個元素,無法轉換為標量值:

const myArray = [2, 3, 1];
console.log(Math.min(myArray)); // NaN

然而,一個快速的解決方法是使用展開操作符來展開元素:

const myArray = [2, 3, 1];
console.log(Math.min(...myArray)); // 1

使用 reduce() 獲取最大和最小元素

歸約操作,有時稱為折疊 ,是函數式編程中一些最強大的操作,具有廣泛的應用程序。 reduce() 函數,在每個數組元素上運行一個 reducer 函數(在回調中定義),最後返回一個值。

由於其應用範圍廣,因此值得介紹該方法:

const myArray = [20, 23, 27];

let minElement = myArray.reduce((a, b) => {
    return Math.min(a, b);
});

console.log(minElement); // 20

apply() 查找最小和最大元素

apply() 方法用於調用具有給定 this 的函數 值和參數數組。這使我們可以將數組輸入到 Math.min() 靜態函數:

const myArray = [20, 23, 27];

let minElement = Math.min.apply(Math, myArray);
console.log(minElement); // 20
// Or
let minElement = Math.min.apply(null, myArray);
console.log(minElement); // 20

使用標準循環獲取最小和最大元素 - 最快性能

JavaScript 中使用循環來根據條件執行重複的任務。條件返回 truefalse .循環將繼續運行,直到定義的條件返回 false .在我們的例子中,我們將使用 for 循環 - 它通常用於多次運行代碼。

獲取最小元素

首先,我們將最小元素初始化為數組的第一個元素。然後,我們遍歷整個數組 查看任何其他元素的值是否小於當前最小值 - 如果是,我們會將新的最小值設置為當前元素的值:

const myArray = [20, 23, 27];

let minElement = myArray[0];
for (let i = 1; i < arrayLength; ++i) {
    if (myArray[i] < minElement) {
        minElement = myArray[i];
    }
}

console.log(minElement); // 20

獲取最大元素

我們首先將最大元素初始化為數組中的第一個元素。然後我們將遍歷整個數組,看看是否有任何其他元素大於初始化的元素,因此將其替換:

const myArray = [20, 23, 27];

let maxElement = myArray[0];
for (let i = 1; i < arrayLength; ++i) {
    if (myArray[i] > maxElement) {
        maxElement = myArray[i];
    }
}

console.log(maxElement); // 27

性能基準

使用 JS Benchmark - 我們已經在數組中從 100 到 1000000 個元素的不同輸入上運行了所有這些方法。性能是相對的,取決於數組的長度。

免費電子書:Git Essentials

查看我們的 Git 學習實踐指南,其中包含最佳實踐、行業認可的標準以及隨附的備忘單。停止谷歌搜索 Git 命令並真正學習 它!

  • 對於小型數組 (100),reduce() 方法執行得最好,其次是標準循環、擴展運算符,然後是 apply() 方法。亞軍的表現幾乎不相上下。
  • 對於中等數組 (1000),標準循環表現最好,其次是 reduce() ,擴展運算符和 apply() 方法。標準循環明顯快於 reduce() 在這裡,這反過來又比亞軍快得多。
  • 對於非常大的數組 (1000000),標準循環在很大程度上優於所有其他方法,以至於標準循環的情況非常強大。

標準循環的擴展性非常好,只有在應用於小型陣列時才會輸給競爭。如果您正在處理一些項目或較小的數組,那麼所有方法都將是相當無縫的。數組越大,使用標準循環的好處就越大。

注意: 不要以表面價值為基準!它們在不同的機器上運行,可能具有不同的瀏覽器版本和 JS 引擎。在您的應用程序中測試這些,然後為您自己的用例選擇可擴展、最快的選項。

結論

在本指南中,我們了解瞭如何在 JavaScript 中獲取數組的最小和最大元素。我們已經查看了 Math.min()Math.max() 方法、擴展運算符、reduce() 方法,apply() 方法並編寫了一個自定義方法來通過 for 獲取元素 循環。

最後,我們對結果進行了基準測試,並指出對於小型數組使用哪種方法並不重要,而對於較大的數組,您應該傾向於使用標準 for 循環。


Tutorial JavaScript 教程
  1. 實用類型:不透明類型以及它們如何拯救火星氣候軌道器

  2. 使用 Angular 路由器本地設置頁面標題🔥

  3. Javascript中的快速排序

  4. 如何在javascript中從數組中添加具有嵌套級別的動態鍵

  5. 可視化嵌套的 JSON 結構

  6. JavaScript Promise 方法解釋!

  7. 如何將數字格式化為貨幣字符串?

  1. Async/await 很棒,但不要放棄 Promises

  2. 讓我們學習 ES2015

  3. ReactJs 中的故事書

  4. 為什麼這個基本的 Meteor 創建項目命令失敗?

  5. 使用 Konva 為壓縮圓可視化添加縮放(從中心縮放和重新定位)

  6. 我有一個動態 html 模板。當我點擊一個按鈕時,它會形成。現在,問題是當我單擊一個按鈕時,所有按鈕都被單擊

  7. 使用 RxJS 擴展運算符獲取所有分頁數據

  1. Angular 2+ vs ReactJS vs Vue.js

  2. JavaScript 將特殊字符轉換為 ASCII |示例代碼

  3. 讓我們開始吧

  4. React Native VS React Native Expo?