js sort 函数排序,中文数组排序
使用 sort 函数对数组排序时,默认情况下元素按照转换为的字符串的各个字符的 Unicode 位点进行排序。这样只能满足一般的英文排序和数字排序,想要自定义排序:对于数字可以简单的使用 a - b
或 b - a
这种形式,对于英文和中文可以使用 String.localeCompare()
函数。
-
英文排序
// 默认按照首字母升序排序 const arr = ["Jan", "March", "Feb", "Dec", "Jun"] arr.sort() console.log(arr) // ["Dec", "Feb", "Jan", "Jun", "March"] // 通过传参自定义排序 const arr1 = ["Jan", "March", "Feb", "Dec", "Jun"] arr1.sort((a, b) => { return b.localeCompare(a) // 降序排序 }) console.log(arr1) // ["March", "Jun", "Jan", "Feb", "Dec"]
-
数字排序
// 默认排序,比较的数字会先被转换为字符串,所以在 Unicode 顺序上 "100" 要比 "11" 要靠前 const arr = [1, 30, 4, 11, 21, 100] arr.sort() console.log(arr) // [1, 100, 11, 21, 30, 4] // 通过传参自定义排序 const arr1 = [1, 30, 4, 11, 21, 100] arr1.sort((a, b) => { return b - a // 小于 0 ,那么 a 会被排列到 b 之前;等于 0 , a 和 b 的相对位置不变;大于 0 , b 会被排列到 a 之前 }) console.log(arr1) // [100, 30, 21, 11, 4, 1]
-
中文排序
// 默认排序 const arr = ['刘', '张', '李', '何', '贺', '朱', '兰'] arr.sort() console.log(arr) // ["何", "兰", "刘", "张", "朱", "李", "贺"] // 通过传参自定义排序 const arr1 = ['刘', '张', '李', '何', '贺', '朱', '兰'] arr1.sort((a, b) => { return a.localeCompare(b) // 重点是这个比较函数 }) console.log(arr1) // ["何", "贺", "兰", "李", "刘", "张", "朱"]