📅  最后修改于: 2023-12-03 15:25:54.513000             🧑  作者: Mango
在 TypeScript 中,我们可以使用 Array.sort()
方法来对数组进行排序。然而有时候我们需要按照自定义的顺序排序,此时就可以使用 Array.sort()
的另一个版本,即带有比较函数的排序方法。
比较函数是一个接受两个参数的函数,返回一个数字表示两个参数的相对顺序。
function compare(a: any, b: any): number {
// 返回一个负数表示 a 在 b 前面,一个正数表示 a 在 b 后面,0 表示它们相等。
}
如果需要将数组按照自定义顺序排序,我们可以将自定义的顺序保存在一个数组中,然后在比较函数中根据这个数组来进行比较。
假设我们有一个数组对象:
const arr = [
{ name: 'Alice', order: 2 },
{ name: 'Bob', order: 3 },
{ name: 'Charlie', order: 1 },
];
我们想要按照 Charlie -> Alice -> Bob
的顺序对数组进行排序,对应的比较函数为:
const order = ['Charlie', 'Alice', 'Bob'];
function compare(a: any, b: any): number {
const indexA = order.indexOf(a.name);
const indexB = order.indexOf(b.name);
return indexA - indexB;
}
arr.sort(compare);
这个比较函数的实现非常简单:它首先获取 a
和 b
的名称在 order
数组中的索引,然后根据这个索引的差值来进行比较。如果 a
的名称在 b
的前面,那么 indexA
小于 indexB
,此时返回一个负数表示 a
在 b
前面;反之如果 a
在 b
后面则返回一个正数。如果它们的顺序相同,则返回 0。
最终排序后的结果为:
[
{ name: 'Charlie', order: 1 },
{ name: 'Alice', order: 2 },
{ name: 'Bob', order: 3 },
];
使用带有比较函数的 Array.sort()
方法可以轻松地实现按照自定义顺序排序的功能。通过定义一个比较函数,可以根据自己的需要对数组进行排序。