JavaScript sort 方法
最后修改于 2025 年 4 月 4 日
在本文中,我们展示了如何使用 JavaScript 中的 sort 方法对数组进行排序。
数组排序
sort 方法对数组的元素进行原地排序,并返回已排序的数组。 默认情况下,它将元素转换为字符串并比较它们的 UTF-16 代码单元值。 这意味着默认情况下,数字不会按数值排序。
该方法接受一个可选的比较函数,用于定义排序顺序。 该函数应根据参数返回负值、零或正值。 使用 sort 方法时,原始数组会被修改。
对于简单的字符串数组,默认排序效果很好。 对于数字或复杂对象,通常需要一个比较函数。 在现代 JavaScript 引擎中,排序是稳定的,这意味着相等的元素会保留其原始顺序。
基本字符串排序
以下示例演示了使用字符串的默认排序行为。
const fruits = ['banana', 'apple', 'orange', 'pear']; fruits.sort(); console.log(fruits);
我们创建一个水果数组,并按字母顺序对它们进行排序。 默认排序将元素转换为字符串并进行比较。 原始数组会被修改。
$ node main.js [ 'apple', 'banana', 'orange', 'pear' ]
数字排序
默认排序不适用于数字,因为它将它们作为字符串进行比较。
const numbers = [10, 5, 100, 2, 1000]; numbers.sort(); console.log(numbers);
如果没有比较函数,数字将被转换为字符串并按字典顺序进行比较。 这会导致 '100' 排在 '2' 之前,因为在字符串比较中 '1' 小于 '2'。
$ node main.js [ 10, 100, 1000, 2, 5 ]
使用比较函数对数字进行排序
为了正确地对数字进行排序,我们需要提供一个比较函数。
const numbers = [10, 5, 100, 2, 1000]; numbers.sort((a, b) => a - b); console.log(numbers);
比较函数从 a 中减去 b。 如果结果为负数,则 a 在 b 之前。 如果为正数,则 b 在 a 之前。 如果为零,它们的顺序保持不变。 这将数字按升序排序。
$ node main.js [ 2, 5, 10, 100, 1000 ]
按属性对对象进行排序
我们可以通过比较对象的属性来对对象数组进行排序。
const users = [
{ name: 'John', age: 30 },
{ name: 'Jane', age: 25 },
{ name: 'Bob', age: 35 }
];
users.sort((a, b) => a.age - b.age);
console.log(users);
我们根据用户对象的年龄属性对它们进行排序。 比较函数减去年龄以确定顺序。 这将用户从最年轻到最年长进行排序。
$ node main.js
[
{ name: 'Jane', age: 25 },
{ name: 'John', age: 30 },
{ name: 'Bob', age: 35 }
]
不区分大小写的字符串排序
为了进行不区分大小写的字符串排序,我们需要一个自定义比较函数。
const words = ['apple', 'Banana', 'cherry', 'Date'];
words.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
console.log(words);
我们使用 localeCompare,并将 sensitivity 设置为 'base' 以进行不区分大小写的比较。 这将大写和小写字母视为相等。 排序顺序现在真正地按字母顺序排列,而不考虑大小写。
$ node main.js [ 'apple', 'Banana', 'cherry', 'Date' ]
来源
在本文中,我们演示了如何使用 sort() 方法在 JavaScript 中对数组进行排序。
作者
列出 所有 JS 数组函数。