JavaScript的数组排序

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]

降序排序

要对数组进行数字降序排序,可以在比较函数中交换ab的位置,如下所示:

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后面。否则,按照字母表顺序排序。

猜你喜欢

转载自blog.csdn.net/github_36738403/article/details/131325151