如何在 TypeScript 中对数组进行排序

在 TypeScript 中对数组进行排序

How to sort an Array in TypeScript

使用该sort()方法对 TypeScript 中的数组进行排序,例如
numArray.sort((a, b) => a - b). sort方法采用将排序顺序定义为参数的函数。在对数值数组进行排序时必须提供该函数,但在对字符串数组进行排序时是可选的。

索引.ts
// ✅ for Numbers const numArray: number[] = [15, 4, 1, 8]; const result1 = numArray.sort((a, b) => a - b); console.log(result1); // 👉️ [1, 4, 8, 15] // ✅ for Strings const strArray: string[] = ['z', 'c', 'a', 'f']; const result2 = strArray.sort(); console.log(result2); // 👉️ ['a', 'c', 'f', 'z'] // ✅ For Objects const objArray: { num: number }[] = [ { num: 15 }, { num: 4 }, { num: 1 }, { num: 8 }, ]; const result3 = objArray.sort((obj1, obj2) => { if (obj1.num > obj2.num) { return 1; } if (obj1.num < obj2.num) { return -1; } return 0; }); console.log(result3); // 👉️ [{num: 1}, {num: 4}, {num: 8}, {num: 15}]

我们使用
Array.sort
方法对 TypeScript 中的数字和字符串数组进行排序。

请注意,该sort()方法对数组的元素进行就地排序并返回排序后的数组。换句话说,它改变了原始数组。

索引.ts
const numArray: number[] = [15, 4, 1, 8]; const result1 = numArray.sort((a, b) => a - b); console.log(result1); // 👉️ [1, 4, 8, 15] console.log(numArray); // 👉️ [1, 4, 8, 15]

如果您想对数组进行排序而不改变它们,请在调用该sort()方法之前使用扩展语法 (…) 创建一个浅表副本。

索引.ts
// ✅ for Numbers const numArray: number[] = [15, 4, 1, 8]; const result1 = [...numArray].sort((a, b) => a - b); console.log(result1); // 👉️ [1, 4, 8, 15] console.log(numArray); // 👉️ [15, 4, 1, 8] // ✅ for Strings const strArray: string[] = ['z', 'c', 'a', 'f']; const result2 = [...strArray].sort(); console.log(result2); // 👉️ ['a', 'c', 'f', 'z'] console.log(strArray); // 👉️ ['z', 'c', 'a', 'f']


在调用该方法之前,
我们使用
扩展语法 (…)
将数组的值解压缩到一个新数组中。
sort

这可能是您想要做的,因为突变可能会造成混淆并且难以在整个代码库中进行跟踪。

在对数字数组进行排序时,我们必须将一个函数传递给该sort()方法,而对于字符串——我们不需要。

我们在第一个示例中传递给方法的参数是一个定义排序顺序的函数。

如果未向该sort方法提供函数参数,则数组元素将转换为字符串并根据其 UTF-16 代码单元值进行排序。

这不是您在处理数字数组时想要的,但它正是您在排序字符串数组时想要的。

最后一个示例显示了如何对对象数组进行排序。

索引.ts
// ✅ For Objects const objArray: { num: number }[] = [ { num: 15 }, { num: 4 }, { num: 1 }, { num: 8 }, ]; const result3 = objArray.sort((obj1, obj2) => { if (obj1.num > obj2.num) { return 1; } if (obj1.num < obj2.num) { return -1; } return 0; }); console.log(result3); // 👉️ [{num: 1}, {num: 4}, {num: 8}, {num: 15}]

sort()方法使用以下逻辑对数组中的元素进行排序:

  • 如果比较函数的返回值大于,则
    0排序ba

  • 如果比较函数的返回值小于,则
    0排序ab

  • 如果比较函数的返回值等于0,则保持原先的顺序ab

您可以使用相同的方法按字符串属性对对象数组进行排序。

索引.ts
// ✅ For Objects const objArray: { str: string }[] = [ { str: 'z' }, { str: 'c' }, { str: 'a' }, { str: 'f' }, ]; const result3 = objArray.sort((obj1, obj2) => { if (obj1.str > obj2.str) { return 1; } if (obj1.str < obj2.str) { return -1; } return 0; }); console.log(result3); // 👉️ [{str: 'a'}, {str: 'c'}, {str: 'f'}, {str: 'z'}]

发表评论