如何降低TypeScript方法的圈复杂度?附待优化函数示例
TypeScript排序函数圈复杂度优化方案
原函数通过switch和if-else处理不同维度的排序逻辑,圈复杂度较高,以下是更简洁的优化方案:
优化后代码
updateSort(s: Sort) { // 排序配置映射表:key对应active字段,value对应正向排序函数 const sortConfigs: Record<string, (a: PersonInfo, b: PersonInfo) => number> = { personName: (a, b) => a.name.localeCompare(b.name), personAddress: (a, b) => a.pageTypeDescription.toLocaleString().localeCompare(b.pageTypeDescription.toLocaleString()), personVisitors: (a, b) => a.viewsCount - b.viewsCount, personContacts: (a, b) => a.clicksCount - b.clicksCount }; if (s.active !== this.personSort.active || s.direction !== this.personSort.direction) { // 获取对应排序函数,默认用personName的逻辑 const baseSortFunc = sortConfigs[s.active] || sortConfigs.personName; // 根据方向生成最终排序函数 const finalSortFunc = s.direction === 'desc' ? (a, b) => baseSortFunc(b, a) : baseSortFunc; this.sliceList.sort(finalSortFunc); } }
优化说明
- 用映射表替代switch分支:将不同排序维度的逻辑预先存入对象,通过键直接获取对应函数,消除了switch带来的分支判断,降低圈复杂度。
- 统一方向处理逻辑:通过三元表达式直接生成最终的排序函数,避免了单独的if-else分支,让逻辑更紧凑。
- 提升可维护性:后续新增排序字段时,只需在
sortConfigs中添加新的键值对即可,无需修改核心逻辑代码。
内容的提问来源于stack exchange,提问作者Mayank Gupta
相关产品推荐
相关产品推荐

