JavaScript中的数组排序方法可以用于对数组进行数字排序、字符串排序或按照自定义规则排序。
数字排序
升序排序
要对数组进行数字升序排序,可以使用sort
方法,通过比较函数来指定排序规则。比较函数应该返回一个负数、零或正数,表示两个元素的相对顺序。如下所示:
const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
arr.sort((a, b) => a - b);
console.log(arr); // 输出 [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
降序排序
要对数组进行数字降序排序,可以在比较函数中交换a
和b
的位置,如下所示:
arr.sort((a, b) => b - a);
console.log(arr); // 输出 [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
字符串排序
对于字符串排序,sort
方法默认按照字母顺序进行排序。需要注意的是,它是按照Unicode码点进行排序的,而不是按照字母表顺序。如下所示:
const arr = ['apple', 'Banana', 'cherry', 'dates', 'Elderberry'];
arr.sort();
console.log(arr); // 输出 ["Banana", "Elderberry", "apple", "cherry", "dates"]
如果需要按照字母表顺序排序,可以使用localeCompare
方法,如下所示:
arr.sort((a, b) => a.localeCompare(b));
console.log(arr); // 输出 ["apple", "Banana", "cherry", "dates", "Elderberry"]
localeCompare
方法会返回一个负数、零或正数,表示两个字符串的相对顺序。如果字符串a
应该排在b
前面,则返回负数;如果字符串a
应该排在b
后面,则返回正数;如果两个字符串相等,则返回零。
自定义规则排序
要按照自定义规则对数组进行排序,可以在比较函数中指定排序规则。以下是一个例子,按照字母表顺序排序(不区分大小写),但是把所有以元音字母开头的单词排在其他单词的前面:
const arr = ['apple', 'Banana', 'egg', 'cherry', 'orange', 'Dates'];
arr.sort((a, b) => {
const firstLetterA = a[0].toLowerCase();
const firstLetterB = b[0].toLowerCase();
const vowels = ['a', 'e', 'i', 'o', 'u'];
const isAVowelA = vowels.includes(firstLetterA);
const isAVowelB = vowels.includes(firstLetterB);
if (isAVowelA && !isAVowelB) {
return -1;
} else if (!isAVowelA && isAVowelB) {
return 1;
} else {
return a.localeCompare(b);
}
});
console.log(arr); // 输出 ["apple", "egg", "Banana", "cherry", "Dates", "orange"]
在比较函数中,首先获取两个字符串的首字母,并将它们转换成小写字母。然后,判断它们是否为元音字母。如果a
以元音字母开头,而b
不是,则返回负数,表示a
应该排在b
前面。如果b
以元音字母开头,而a
不是,则返回正数,表示a
应该排在b
后面。否则,按照字母表顺序排序。