返回

排序超简单,掌握 js sort() 轻松搞定!

前端

从零理解 sort() 的原理

js 中的 sort() 方法,可谓是数组排序领域的"一哥"。它不仅能对数字、字符串等基本类型进行排序,更可处理复杂对象,可谓一招鲜,吃遍天。

原理上,sort() 就像一场"选美大赛",先由计算机对数组元素逐个比较,根据比较结果决定元素的排名。然后,计算机按照排名顺序,将元素依次排列,形成一个有序数组。

自定义比较函数:胜负由你定!

sort() 的精妙之处在于,它支持自定义比较函数。通过它,你可以随心所欲地定义比较规则,让排序结果符合你的预期。

自定义比较函数的参数是两个待比较元素 a 和 b。函数的返回值决定了元素 a 和 b 在排序后的位置:

  • 若返回一个正数(比如 1),则 a 排在 b 之后。
  • 若返回一个负数(比如 -1),则 a 排在 b 之前。
  • 若返回 0,则 a 和 b 的顺序保持不变。

实例解读,轻松上手

为了加深你的理解,这里有几个实例:

  • 按数字顺序排序:
const numbers = [5, 2, 9, 3, 7];
numbers.sort();
console.log(numbers); // 输出:[2, 3, 5, 7, 9]
  • 按字符串长度排序:
const strings = ['apple', 'banana', 'cherry', 'durian'];
strings.sort((a, b) => a.length - b.length);
console.log(strings); // 输出:[apple, cherry, banana, durian]
  • 按对象属性值排序:
const objects = [
  { name: 'John', age: 25 },
  { name: 'Mary', age: 30 },
  { name: 'Bob', age: 22 },
];
objects.sort((a, b) => a.age - b.age);
console.log(objects); // 输出:[ { name: 'Bob', age: 22 }, { name: 'John', age: 25 }, { name: 'Mary', age: 30 } ]

进阶技巧,锦上添花

若想在 sort() 中使用自定义比较函数,记住以下几点:

  • 比较函数必须返回一个数字。
  • 比较函数必须是纯函数,即它的返回值只取决于输入参数,不会产生任何副作用。
  • 如果数组元素是对象,比较函数可以访问这些对象的属性进行比较。

结语

js sort() 方法的妙用,远不止本文所述。期待你探索更多可能性,让 sort() 成为你编程工具箱中的利器。