MST

星途 面试题库

面试题:TypeScript剩余参数与泛型结合的性能优化

编写一个TypeScript函数`sortByProperty`,该函数接受一个对象数组和一个属性名作为参数,按照指定属性对数组进行排序。要求使用剩余参数和泛型,使得函数可以接受多个属性名依次进行排序,并且分析这种实现方式相较于传统方式在性能和灵活性上的优势。
31.9万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
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;
    });
}

性能优势

  1. 减少多次排序开销:传统方式如果要根据多个属性排序,可能需要多次调用排序函数,每次排序都是对整个数组进行操作。而这种实现方式通过一次遍历props数组,在一个sort函数内部完成多个属性的排序逻辑,减少了重复排序带来的性能损耗。

灵活性优势

  1. 动态属性排序:使用剩余参数...props,可以在调用函数时动态传入任意数量的属性名进行排序。传统方式可能需要针对不同属性组合编写不同的排序函数,而这种方式只需一次定义,即可适应多种属性组合的排序需求。
  2. 泛型支持:通过泛型T,函数可以处理任意类型的对象数组,只要对象包含传入的属性名即可。传统方式可能需要针对不同类型的对象数组分别编写排序逻辑,泛型大大提高了函数的通用性和灵活性。