JavaScript 的 sort 方法
先上结论
使用 sort() 方法对数组进行排序时,最好指定它的参数,否则会出现意料之外的结果,具体请往下看
语法
arr.sort([compareFunction])
参数
compareFunction 可选参数(最好提供)
用来指定数组元素按照某种顺序进行排列的函数,如果省略,则先将元素转换为字符串,然后按照字符串的各个字符的Unicode位点进行排序
firstEl
第一个用于比较的元素
*secondEl
第二个用于比较的元素
返回值
排序后的数组,数组已进行原地排序,不会产生新的数组
描述
sort() 方法用原地算法对数组的元素进行排序,并返回排序后的数组(会改变数组本身)。默认的排序方式是先将元素转换成字符串,然后按照字符串的各个字符的Unicode位点进行排序。
举个例子
没有指明 compareFunction
默认的排序顺序是由小到大
const arr = [80, 9, 3, 4, 1]
arr.sort()
// [1, 3, 4, 80, 9]
console.log(arr)
大家对80和9的顺序肯定有疑问,这是因为我们没有指定 compareFunction,所以会将数组元素先转换成字符串,然后对字符串的各个字符串的Unicode位点进行排序,然而在Unicode顺序上,'80'要比'9'要靠前
提供 compareFunction
如果指定了 compareFunction,那么数组会按照调用该函数的返回值进行排序,即 a 和 b 是两个将要被比较的元素:
如果 compareFunction(a, b) 小于 0, 那么 a 会排在 b 的前面
如果 compareFunction(a, b) 大于 0, 那么 a 会排在 b 的后面
如果 compareFunction(a, b) 等于 0, 那么 a 和 b 的相对位置不变
const arr = [80, 9, 3, 4, 1]
arr.sort()
// [1, 3, 4, 9, 80]
console.log(arr)所以重复一遍结论
靠谱的做法是始终传递 compareFunction 参数,告诉 sort 方法排序规则是什么。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!