如何在 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+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告