JavaScript 数组怎么排序
在日常开发和处理数据时,我们经常会遇到需要对一组数据“排排队”的情况——比如把用户的订单按金额从高到低排列,或者把商品名称按拼音首字母排序。作为前端开发里最常用的工具之一,JavaScript 提供了专门处理数组排序的方法,而且用法比很多人想的更简单。
最基础的排序:sort() 方法
JavaScript 数组自带的 sort() 方法,是排序的“入门工具”,不用额外写太多代码就能用。比如我们有一组数字数组 [3, 1, 5, 2, 4],直接调用 sort() 就能得到从小到大排列的结果:

`javascript
const nums = [3, 1, 5, 2, 4];
nums.sort();
console.log(nums); // 输出:[1, 2, 3, 4, 5]
`
如果是字符串数组,sort() 会按字母顺序排列,比如 ['banana', 'apple', 'cherry'] 排序后会变成 ['apple', 'banana', 'cherry'],这和我们查字典的规则是一样的。
不过这里有个容易踩的小坑:如果数字数组里有两位数以上的数字,sort() 就会“失灵”。比如 [10, 2, 20],用 sort() 后得到的是 [10, 2, 20],因为它默认是把所有元素当成字符串来排序——'10' 的第一个字符是 '1',比 '2' 的第一个字符小,所以就排在前面了。
解决数字排序的关键:传入比较函数
刚才的坑,只需要给 sort() 加一个“比较规则”就能解决。这个规则是一个函数,用来告诉 JavaScript 怎么判断两个数的大小:如果返回负数,就代表第一个数要排在前面;返回正数,就代表第二个数要排在前面;返回0,就说明两个数相等不用换位置。
比如要让数字从小到大排列,比较函数可以写 (a, b) => a - b:
`javascript
const nums = [10, 2, 20];
nums.sort((a, b) => a - b);
console.log(nums); // 输出:[2, 10, 20]
`
如果要从大到小排列,只要把 a - b 改成 b - a 就行:
`javascript
nums.sort((a, b) => b - a);
console.log(nums); // 输出:[20, 10, 2]
`
这个逻辑也可以用到生活场景里,比如你有一组商品价格 [199, 99, 299, 49],要找最贵的,用这个比较函数就能快速排好。
给对象数组排序:按用户的需求灵活调整
实际开发里,我们遇到更多的是对象数组——比如存了用户信息的数组,每个元素是 { name: '张三', age: 25 } 这样的对象。这时候排序的核心,就是拿对象里的某个属性来比较。
比如要按年龄从小到大排序,比较函数就可以取两个对象的 age 属性相减:
`javascript
const users = [
{ name: '李四', age: 30 },
{ name: '张三', age: 25 },
{ name: '王五', age: 35 }
];
users.sort((a, b) => a.age - b.age);
// 排序后顺序:张三(25)→ 李四(30)→ 王五(35)
`
如果要按姓名的拼音排序,就可以用字符串的 localeCompare() 方法,这个方法专门用来处理不同语言的字符串比较,写起来很简单:
`javascript
users.sort((a, b) => a.name.localeCompare(b.name));
// 排序后顺序:李四 → 王五 → 张三(按拼音首字母 L、W、Z 排列)
`
一点小提醒:sort() 是“原地修改”数组
最后要注意一个小细节:sort() 方法不会返回一个新的排好的数组,而是直接修改原来的数组。如果你不想改变原数组,可以先把数组复制一份再排序,比如用展开运算符:
`javascript
const original = [3, 1, 5];
const sorted = [...original].sort((a, b) => a - b);
console.log(original); // 还是 [3, 1, 5],没被修改
console.log(sorted); // 排好的 [1, 3, 5]
`
掌握了这些,不管是排数字、字符串还是对象数组,都能轻松应对日常开发里的排序需求了。