在 JavaScript 中,我们使用 sort() 方法来对数组中的元素进行排序,通常是按照字母顺序或升序排列。值得注意的是,这个方法会直接修改原始数组,并返回排序后的结果。
- 默认情况下按字母顺序对元素进行排序(将其视为字符串)
- 直接修改原始数组,而不是创建一个新的数组副本
- 我们可以使用比较函数来实现自定义排序(例如对数字进行排序)
对字符串数组进行排序
JavaScript
CODEBLOCK_3d202948
语法
arr.sort(compareFunction);
参数
- arr:需要被排序的数组。
- compareFunction (可选):用来定义排序顺序的函数。如果省略该参数,数组元素将根据其字符串的 Unicode 码点值进行排序。
返回值:该方法返回排序后的原始数组的引用。
在 JavaScript 中对数值数组进行排序
升序排列
无论数组元素是字符串还是数字,Array.sort() 默认都会按照字典顺序(lexicographical order)对元素进行排序。
JavaScript
CODEBLOCK_ddcb4bb1
> 需要注意的是,JavaScript 中 sort() 的排序方式与 C++、Java 和 Python 等语言有所不同。它是将数组元素作为字符串按字母顺序进行比较,而不是作为数字。这就导致元素是根据字符的 Unicode 值进行排序,而非按照我们期望的数值大小顺序。
为了正确地对数值数组进行排序,我们需要传入一个比较器函数。
JavaScript
CODEBLOCK_38c8a023
降序排列
我们可以通过调整比较器函数的逻辑,来让数组按降序排列。
JavaScript
CODEBLOCK_2bbd9d32
建议阅读这篇文章 How to Sort Numeric Array using JavaScript?,以深入了解 JavaScript 数组排序函数的工作原理。
对字符串数组进行反向排序
在比较器函数中,我们可以利用 string.localeCompare() 方法来实现反向排序。
JavaScript
CODEBLOCK_9818417a
当然,我们也可以结合使用 array.reverse() 方法,先将数组排序,再将其逆序,从而实现降序排列。
JavaScript
CODEBLOCK_39165800
Output
[ ‘JS‘, ‘HTML‘, ‘CSS‘ ]
对对象数组进行排序
我们可以根据对象数组的属性值来对其进行排序。
JavaScript
CODEBLOCK_733e143b
排序的稳定性
排序的稳定性是指,当我们在对列表进行排序时,如果两个项目的值相等,它们在列表中的相对顺序应该保持在原始列表中的顺序。一个稳定的排序算法会保持相等元素的原始顺序不变。
> 注意:在 ECMAScript 2019(第 10 版)之前,JavaScript 的 sort() 方法并不保证排序的稳定性,这意味着在排序后,相等元素的原始顺序可能会发生改变。
JavaScript
CODEBLOCK_0cf0adb5
这篇文章详细解释了 JavaScript sort() 的排序稳定性。