function sortByProperty<T extends Record<string, any>>(arr: T[], ...props: (keyof T)[]): T[] {
return arr.sort((a, b) => {
for (const prop of props) {
if (a[prop] < b[prop]) return -1;
if (a[prop] > b[prop]) return 1;
}
return 0;
});
}
性能优势
- 减少多次排序开销:传统方式如果要根据多个属性排序,可能需要多次调用排序函数,每次排序都是对整个数组进行操作。而这种实现方式通过一次遍历
props
数组,在一个sort
函数内部完成多个属性的排序逻辑,减少了重复排序带来的性能损耗。
灵活性优势
- 动态属性排序:使用剩余参数
...props
,可以在调用函数时动态传入任意数量的属性名进行排序。传统方式可能需要针对不同属性组合编写不同的排序函数,而这种方式只需一次定义,即可适应多种属性组合的排序需求。
- 泛型支持:通过泛型
T
,函数可以处理任意类型的对象数组,只要对象包含传入的属性名即可。传统方式可能需要针对不同类型的对象数组分别编写排序逻辑,泛型大大提高了函数的通用性和灵活性。