如何在 JavaScript 中定義自定義排序函式?


在 JavaScript 中建立自定義排序函式可以成為自定義和最佳化排序過程的好方法。透過定義自定義排序函式,您可以控制陣列元素的特定排序順序。

本文將解釋如何在 JavaScript 中定義自定義排序函式,提供一些使用示例,並討論一些確保排序過程儘可能高效的技巧。

通常,此方法會透過移動某些元素來更改初始陣列。

此外,sort() 方法在使用字串比較進行排序之前,會將輸入陣列的元素轉換為字串。當您輸入一個數字陣列時,它們將首先轉換為其字串等價物,然後再進行比較。

JavaScript 中的自定義 sort()

自定義 sort() 是 JavaScript 中的一種方法,它允許使用者為陣列指定自己的自定義排序函式。

當您需要按特定順序(例如按字母順序或按數字順序升序)排序元素時,這非常有用。自定義排序函式接受兩個引數,並根據值應該如何相互排序返回 1、0 或 -1。

示例

在以下示例中,我們正在執行指令碼以及自定義 sort()。在這種情況下,我們聲明瞭一個包含一些名稱的陣列,然後我們使用條件邏輯執行自定義排序

<!DOCTYPE html>
<html>
<body>
   <p id="tutorial"></p>
   <script>
      var array = ['BMW', 'BENZ', 'AUDI', 'DUCATI'];
      array.sort(function(x, y) {
         if (x < y) {
            return -1;
         }
         if (x > y) {
            return 1;
         }
         return 0;
      });
      document.getElementById("tutorial").innerHTML= array;
   </script>
</body>
</html>

當指令碼執行時,它將生成一個輸出,其中包含在網頁上列印的陣列,按升序排列,這是在使用者執行指令碼時觸發事件時觸發的。

示例

在另一種情況下,指令碼正在使用自定義 sort()執行。首先,我們建立了一個包含名稱“id”和“car”的陣列。並且我們正在對名稱“car”執行排序並觀察結果。

<!DOCTYPE html>
<html>
<body>
   <p id="tutorial"></p>
   <script>
      function sortBy(field) {
         return function(a, b) {
            return (a[field] > b[field]) - (a[field] < b[field])
         };
      }
      let myArr = [
         {id: 23, car: 'wagnor'},
         {id: 40, car: 'dzire'},
         {id: 14, car: 'swift'},
      ]
      myArr.sort(sortBy('car'));
      document.getElementById("tutorial").innerHTML=JSON.stringify(myArr);
   </script>
</body>
</html>

執行上述指令碼時,將觸發事件,對名稱“car”執行排序,並顯示與不同提到的汽車相比按升序排列的陣列

示例

讓我們看另一個示例,其中我們有一個任意排序,將順序分配給一個陣列,然後使用indexof

<!DOCTYPE html>
<html>
<body>
   <p id="tutorial"></p>
   <script>
      var sortOrder = ['tilak', 'bheem', 'avathar'];
      var myArr = [{
         name: 'avathar'
      },
      {
         name: 'tilak'
      },
      {
         name: 'bheem'
      },
      {
         name: 'tilak'
      }
      ];
      myArr.sort(function(a, b) {
         return sortOrder.indexOf(a.name) - sortOrder.indexOf(b.name);
      });
      document.getElementById("tutorial").innerHTML=JSON.stringify(myArr);
   </script>
</body>
</html>

當指令碼執行時,它將生成一個輸出,其中包含在網路瀏覽器上列印的陣列,按照提供的任意排序順序排列,該順序是在觸發事件時發生的,它將按照提供的排序順序對陣列進行排序。

更新於: 2023年1月18日

14K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.