返回

揭秘JS方法sort默认排序规则,助你玩转数组排序!

前端

各位前端开发工程师们,大家在使用sort方法对数组进行排序时,是否思考过sort方法默认的排序规则呢?本文将为你揭秘sort方法的默认排序规则,并指导你如何根据实际需求制定自定义比较函数,让你在数组排序上更加得心应手!

一、sort方法默认排序规则

在JavaScript中,sort方法默认按照字符串的Unicode编码点进行排序。这意味着,字符的Unicode编码点越小,排序的位置就越靠前。例如,"a"的Unicode编码点为97,而"b"的Unicode编码点为98,因此,在默认情况下,"a"将排在"b"之前。

二、自定义比较函数

如果你想根据实际需求进行自定义排序,那么你可以提供一个比较函数给sort方法。比较函数是一个函数,它接受两个参数,并返回一个数字。如果第一个参数应该排在第二个参数之前,则返回一个负数;如果第一个参数应该排在第二个参数之后,则返回一个正数;如果两个参数应该相等,则返回0。

例如,如果你想按照数字大小对数组进行排序,你可以提供如下比较函数:

function compareNumbers(a, b) {
  return a - b;
}

然后,你可以将此比较函数传递给sort方法,如下所示:

const numbers = [1, 5, 3, 2, 4];
numbers.sort(compareNumbers);
console.log(numbers); // [1, 2, 3, 4, 5]

三、综合示例

让我们结合一个实际例子来理解sort方法的默认排序规则和自定义比较函数的使用。假设我们有一个数组,其中包含学生姓名和分数:

const students = [
  { name: "John", score: 90 },
  { name: "Mary", score: 80 },
  { name: "Bob", score: 70 },
  { name: "Alice", score: 95 },
];

如果你想按照学生姓名进行默认排序,你可以直接使用sort方法,如下所示:

students.sort();
console.log(students);
/*
[
  { name: "Alice", score: 95 },
  { name: "Bob", score: 70 },
  { name: "John", score: 90 },
  { name: "Mary", score: 80 }
]
*/

如果你想按照学生分数进行排序,你可以提供如下比较函数:

function compareScores(a, b) {
  return b.score - a.score;
}

然后,你可以将此比较函数传递给sort方法,如下所示:

students.sort(compareScores);
console.log(students);
/*
[
  { name: "Alice", score: 95 },
  { name: "John", score: 90 },
  { name: "Mary", score: 80 },
  { name: "Bob", score: 70 }
]
*/

希望通过本文,你能对sort方法的默认排序规则和自定义比较函数的使用有更深入的了解,并在实际开发中灵活运用这些知识,实现更复杂的数组排序需求!