数组排序之sort函数

一、基本语法

array.sort([compareFunction])
  • array:要排序的数组。

  • compareFunction(可选):用于比较数组元素的函数。如果不提供比较函数,元素会被转换为字符串,然后按照 Unicode 码点进行排序。

二、默认排序行为

如果没有提供比较函数,sort 方法会将数组元素转换为字符串,然后按照 Unicode 码点进行排序。这可能会导致一些不符合预期的结果,特别是对于数字。

//示例
const numbers = [40, 100, 1, 5, 25, 10];
numbers.sort();
console.log(numbers); // 输出: [1, 10, 100, 25, 40, 5]

在这个例子中,数字被转换为字符串后进行排序,导致结果不符合预期。

三、使用比较函数

为了实现正确的排序,可以提供一个比较函数。比较函数接受两个参数,通常称为 a 和 b,并返回一个数值:

  • 如果返回值小于 0,则 a 会被排在 b 之前。
  • 如果返回值等于 0,则 a 和 b 的相对位置不变。
  • 如果返回值大于 0,则 a 会被排在 b 之后。
//数字升序排列
const numbers = [40, 100, 1, 5, 25, 10];
numbers.sort((a, b) => a - b);
console.log(numbers); // 输出: [1, 5, 10, 25, 40, 100]

在这个例子中,比较函数 (a, b) => a - b 确保数字按升序排列。

//数字降序排列
const numbers = [40, 100, 1, 5, 25, 10];
numbers.sort((a, b) => b - a);
console.log(numbers); // 输出: [100, 40, 25, 10, 5, 1]

在这个例子中,比较函数 (a, b) => b - a 确保数字按降序排列。

示例:对象数组排序

//假设有一个对象数组,每个对象都有一个 age 属性,我们希望按 age 属性进行排序。
const people = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 30 },
  { name: 'Charlie', age: 20 }
];

people.sort((a, b) => a.age - b.age);
console.log(people);
// 输出:
// [
//   { name: 'Charlie', age: 20 },
//   { name: 'Alice', age: 25 },
//   { name: 'Bob', age: 30 }
// ]

四、总结

  • 默认行为:将数组元素转换为字符串,按 Unicode 码点排序。
  • 比较函数:用于自定义排序逻辑,返回值决定元素的相对顺序。
  • 稳定性:不同的 JavaScript 引擎可能有不同的实现,部分实现是稳定的。

通过理解 sort 函数的工作原理和使用比较函数,可以实现对数组元素的精确排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值