摘要:在本教程中,您将学习如何按对象属性值的顺序排序对象数组。
介绍 Array sort() 方法
JavaScript Array 对象提供了sort()
方法,允许您对数组项目进行就地排序并返回排序后的数组。
以下是sort()
方法的语法
sort(comparator)
在此语法中
comparator
是一个可选函数,它决定数组中项目的顺序。
comparator
函数接受两个参数 a 和 b,它们是要比较的数组元素。
function fn(a,b) {
// ...
}
Code language: JavaScript (javascript)
比较器函数应返回一个数字,该数字将决定a
是否大于、小于或等于b
。
- 负数指示
sort()
函数将a
放在b
之前。 - 正数指示
sort()
函数将a
放在b
之后。 零
或NaN
指示sort()
函数将a
和b
视为相等。
sort()
方法返回对同一原始数组的引用,其中项目已排序。换句话说,它修改原始数组中项目的顺序。
如果您不想返回带有排序项的原始数组的副本,可以使用toSorted()
方法。
我们将向您展示如何使用sort()
方法对对象数组进行排序。
按数字对对象数组进行排序
以下示例显示了如何按分数升序对employee
对象的数组进行排序
let employees = [
{ name: 'John', dob: 'Dec 15, 2007', score: 80 },
{ name: 'Ana', dob: 'Jan 15, 2009', score: 75 },
{ name: 'Zion', dob: 'Feb 15, 2011', score: 90 },
];
employees.sort((a, b) => a.score - b.score);
employees.forEach((e) => {
console.log(`${e.name} ${e.score}`);
});
Code language: JavaScript (javascript)
输出
Ana 75
John 80
Zion 90
它是如何工作的。
首先,声明一个员工对象的数组,其中每个对象都有name
、dob
和score
属性。
其次,使用sort()
方法按分数对员工进行排序。
employees.sort((a, b) => a.score - b.score);
Code language: JavaScript (javascript)
sort()
方法使用以下比较器函数
(a, b) => a.score - b.score
Code language: PHP (php)
在此示例中,a 和 b 都是具有 name、dob 和 score 属性的员工对象。比较器函数比较两个员工对象的 score。
按分数降序对员工进行排序
要按分数降序对员工进行排序,您需要修改比较器函数,如下所示
let employees = [
{ name: 'John', dob: 'Dec 15, 2007', score: 80 },
{ name: 'Ana', dob: 'Jan 15, 2009', score: 75 },
{ name: 'Zion', dob: 'Feb 15, 2011', score: 90 },
];
employees.sort((a, b) => b.score - a.score);
employees.forEach((e) => {
console.log(`${e.name} ${e.score}`);
});
Code language: JavaScript (javascript)
输出
Zion 90
John 80
Ana 75
按字符串对对象数组进行排序
以下显示了如何按字母顺序对员工姓名进行排序
let employees = [
{ name: 'John', dob: 'Dec 15, 2007', score: 80 },
{ name: 'Ana', dob: 'Jan 15, 2009', score: 75 },
{ name: 'Zion', dob: 'Feb 15, 2011', score: 90 },
];
employees.sort((a, b) => a.name.localeCompare(b.name));
employees.forEach((e) => {
console.log(`${e.name} ${e.score}`);
});
Code language: JavaScript (javascript)
输出
Ana
John
Zion
按日期对对象数组进行排序
要按出生日期 (dob) 对员工进行排序,您需要
- 将
dob
从字符串转换为Date
对象。 - 按日期对员工进行排序。
以下代码说明了这个想法
let employees = [
{ name: 'John', dob: 'Dec 15, 2007', score: 80 },
{ name: 'Ana', dob: 'Jan 15, 2009', score: 75 },
{ name: 'Zion', dob: 'Feb 15, 2011', score: 90 },
];
employees.sort((a, b) => new Date(a.dob) - new Date(b.dob));
employees.forEach((e) => {
console.log(`${e.name} ${e.dob}`);
});
Code language: JavaScript (javascript)
输出
John - Dec 15, 2007
Ana - Jan 15, 2009
Zion - Feb 15, 2011
总结
- 使用带有比较器函数的 sort 方法按指定属性值的顺序排序对象数组。
本教程是否有帮助?