如何在 JavaScript 中排序对象数组

摘要:在本教程中,您将学习如何按对象属性值的顺序排序对象数组。

介绍 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()函数将ab视为相等。

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

它是如何工作的。

首先,声明一个员工对象的数组,其中每个对象都有namedobscore属性。

其次,使用sort()方法按分数对员工进行排序。

employees.sort((a, b) => a.score - b.score);Code language: JavaScript (javascript)

sort()方法使用以下比较器函数

(a, b) => a.score - b.scoreCode 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 方法按指定属性值的顺序排序对象数组。
本教程是否有帮助?