📜  按自定义顺序排列数组对象 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:25:54.513000             🧑  作者: Mango

按自定义顺序排列数组对象 - TypeScript

在 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);

这个比较函数的实现非常简单:它首先获取 ab 的名称在 order 数组中的索引,然后根据这个索引的差值来进行比较。如果 a 的名称在 b 的前面,那么 indexA 小于 indexB,此时返回一个负数表示 ab 前面;反之如果 ab 后面则返回一个正数。如果它们的顺序相同,则返回 0。

最终排序后的结果为:

[
  { name: 'Charlie', order: 1 },
  { name: 'Alice', order: 2 },
  { name: 'Bob', order: 3 },
];
总结

使用带有比较函数的 Array.sort() 方法可以轻松地实现按照自定义顺序排序的功能。通过定义一个比较函数,可以根据自己的需要对数组进行排序。