JavaScript 的 Array.sort()

一、sort() 的默认行为

[10, 2, 1].sort(); // 默认排序 → 输出 [1, 10, 2] ❌ 不符合数字大小顺序
  • 原因:sort() 会将元素转换为字符串后,按 Unicode 码点顺序 排序。
  • 结果不符合数值大小顺序。

对非 ASCII 字符的排序

["Banana", "Apple", "Cherry"].sort(); 
// 输出 ["Apple", "Banana", "Cherry"] ✅(按字母顺序)

 二、自定义排序规则

通过传递一个 比较函数(Comparator Function),可以控制排序逻辑。

1. 数字升序排序
const arr = [3, 1, 4, 2];
arr.sort((a, b) => a - b); // 输出 [1, 2, 3, 4] ✅
  • 比较函数规则
    • 如果 a - b < 0 → a 排在 b 前面(升序)。
    • 如果 a - b > 0 → b 排在 a 前面(升序)。
    • 如果 a - b = 0 → 顺序不变。

2. 数字降序排序 

arr.sort((a, b) => b - a); // 输出 [4, 3, 2, 1] ✅

三、其他场景示例

1. 对象数组排序

按对象的某个属性排序:

const users = [
  { name: "John", age: 25 },
  { name: "Alice", age: 30 },
  { name: "Bob", age: 20 }
];

// 按 age 升序排序
users.sort((a, b) => a.age - b.age);
// 结果:Bob(20) → John(25) → Alice(30)
2. 字符串按长度排序
const fruits = ["Apple", "Banana", "Cherry", "Kiwi"];
fruits.sort((a, b) => a.length - b.length);
// 输出 ["Kiwi", "Apple", "Banana", "Cherry"] ✅

四、关键注意事项

  1. 原地排序

    • sort() 会直接修改原数组,而非返回新数组。
    • 若需保留原数组,需先拷贝
const original = [3, 1, 4, 2];
const sorted = [...original].sort((a, b) => a - b);

 

[...original]:创建原数组的浅拷贝

  • 展开运算符(Spread Operator) ... 会展开原数组 original 的所有元素。
  • 创建一个新数组,其元素与原数组完全相同。
  1. 稳定性

    • ES2019 后,sort() 是稳定的(相同值的元素顺序保持不变)。
  2. 非数字类型的排序

    • 对非数字类型(如对象、字符串)排序时,需自定义比较逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值