在 TypeScript 中对对象数组进行排序

Migel Hewage Nimesha 2024年2月15日
  1. TypeScript 对象
  2. TypeScript 对象数组
  3. TypeScript 中的 sort() 方法
在 TypeScript 中对对象数组进行排序

本文展示了如何在 TypeScript 中对对象数组进行排序。

TypeScript 对象

TypeScript 是一种强类型语言。它支持各种类型,例如基元、数组和对象类型。

对象类型是一种特殊类型,可以用属性来表示数据。TypeScript 对象看起来像一个 JSON 对象,如下所示。

{ id: 001, username: 'rick' }

idusername 是上述对象的两个属性。这些值也已分配给每个属性。

在 TypeScript 中,可以使用接口创建自定义对象类型。这些接口允许你创建对象结构,如下所示。

interface employee {
    empId: number,
    empDesignation: string
}

上面的 employee 接口定义了一个 employee 对象,它有两个属性 empIdempDesignation,它们分别是数字和字符串类型。

TypeScript 对象数组

TypeScript 支持可以存储元素集合的数组类型。它也可以存储原始类型值和自定义对象。

让我们创建一个 employee 对象数组。

let employeesList: Array<employee> = [
    {empId: 20, empDesignation: 'senior engineer'},
    {empId: 14, empDesignation: 'junior engineer'},
    {empId: 25, empDesignation: 'program manager'},
    {empId: 12, empDesignation: 'director'}
]

上面的数组 employeesList 包含四个 employee 对象。有时,我们需要按给定属性对这些对象进行排序。

这就像 SQL 按一列或多列排序数据。TypeScript 支持开箱即用的排序。

内置的 sort() 方法可以对对象数组进行排序。

TypeScript 中的 sort() 方法

sort 方法接受一个元素数组并返回排序后的数组。它接受一个可选函数,该函数可用于指定返回数组的排序顺序。

语法:

//1.
Array.sort()
//2.
Array.sort(<custom_function>)

Array 是我们将排序的对象数组。 <custom_function> 可以指定排序顺序。

由于要求是按其属性之一对对象数组进行排序,因此我们必须通过传递决定排序顺序和对象属性的自定义函数来使用 sort 方法。

让我们按属性 id 对数组进行排序。

employeesList.sort(
    (firstObject: employee, secondObject: employee) =>
    	(firstObject.empId > secondObject.empId) ? 1 : -1
);

上例中使用了箭头函数来指定排序条件。

每当函数返回 1 时,这意味着 secondObject 的排序优先级高于 firstObject。否则,firstObject 具有更高的排序优先级。

这将按其 empId 属性按升序对 employeesList 对象进行排序。

输出:

TypeScript 1 中的排序方法

可以使用箭头函数内的以下条件对相同的数组进行降序排序。

(firstObject: employee, secondObject: employee) =>
	(firstObject.empId > secondObject.empId) ? -1 : 1

在某些情况下,你必须先按 empId 排序,然后再按 empDesignation 属性排序。如果给定对象的 empId 属性值相同,我们可以检查条件运算符中的 empDesignation 属性。

let employeesList: Array<employee> = [
    {empId: 20, empDesignation: 'senior engineer'},
    {empId: 14, empDesignation: 'junior engineer'},
    {empId: 14, empDesignation: 'developer'},
    {empId: 25, empDesignation: 'program manager'},
    {empId: 12, empDesignation: 'director'}
]

employeesList.sort(
    (firstObject: employee, secondObject: employee) =>
    	(firstObject.empId > secondObject.empId) ? 1 :
    		(firstObject.empId === secondObject.empId) ? (
                (firstObject.empDesignation > secondObject.empDesignation) ? 1 : -1 )
    	: -1
);

输出:

TypeScript 2 中的排序方法

如我们所见,两个对象具有相同的 empId``14。因此,这两个对象已按 empDesignation 属性排序。

当根据对象的属性对对象进行排序时,sort 方法非常强大。它也可以用于复杂类型的排序。

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

相关文章 - TypeScript Array