📜  typescript 排序对象数组 - TypeScript (1)

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

TypeScript 排序对象数组

在 TypeScript 中,如果我们要对对象数组进行排序,可能需要使用 Array.prototype.sort() 方法。不过在 TypeScript 中,我们需要指定排序的规则和排序的方式,以保证类型安全。

下面是一个简单的示例,排序数字数组:

const numArray: number[] = [3, 1, 4, 2, 5];

numArray.sort(); // 编译报错

由于 TypeScript 是一门强类型语言,上面的代码无法通过 TypeScript 的类型检查。为了使其通过类型检查,我们可以指定比较函数:

const numArray: number[] = [3, 1, 4, 2, 5];

numArray.sort((a, b) => a - b);

上面的代码可以通过 TypeScript 的类型检查,并正确排序。

接下来,让我们来看一下如何对对象数组进行排序。假设我们有以下这样一个对象数组:

interface Person {
  name: string;
  age: number;
}

const people: Person[] = [
  { name: 'John', age: 25 },
  { name: 'Anna', age: 32 },
  { name: 'Bob', age: 21 },
  { name: 'Kate', age: 27 },
];

我们可以在 sort() 方法中传入一个比较函数,指定排序规则。比如,按年龄升序排序:

const peopleSortedByAge: Person[] = people.sort((a, b) => a.age - b.age);

同理,按姓名升序排序:

const peopleSortedByName: Person[] = people.sort((a, b) => a.name.localeCompare(b.name));

需要注意的是,在 TypeScript 中,localeCompare() 方法可以对字符串进行本地化比较,这意味着不同语言环境下的排序结果可能不同。

除了按照单个属性排序,我们也可以按照多个属性排序。比如,按照年龄升序排序,如果年龄相同,则按照姓名升序排序:

const peopleSortedByAgeAndName: Person[] = people.sort((a, b) => {
  if (a.age === b.age) {
    return a.name.localeCompare(b.name);
  }
  return a.age - b.age;
});

总结:在 TypeScript 中对对象数组进行排序时,我们需要指定比较函数,以确保类型安全和正确的排序规则。我们可以按照单个属性或多个属性进行排序,这需要仔细处理比较函数中的逻辑。