这段代码如何优化圈复杂度 export function getOrderStatus(value: string) { switch (value) { case 'pmt_incomplete': return '待支付'; case 'pmt_complete': return '待确认'; case 'un_used': return '待出行'; case 'used': return '已关闭'; case 'finish': return '已关闭'; case 'cancel': return '已取消'; case 'refunding': return '退款中'; case 'refunded': return '已退款'; default: return '未知'; }
时间: 2023-12-21 08:05:39 浏览: 26
圈复杂度是指一个函数中不同执行路径的数量。在这段代码中,圈复杂度为 8,因为有 8 个不同的 case 分支。
为了优化圈复杂度,可以考虑使用对象来代替 switch 语句,将状态码作为对象的属性,对应的中文状态作为对象的值。这样可以简化代码,减少圈复杂度。
下面是优化后的代码示例:
```typescript
const statusMap = {
'pmt_incomplete': '待支付',
'pmt_complete': '待确认',
'un_used': '待出行',
'used': '已关闭',
'finish': '已关闭',
'cancel': '已取消',
'refunding': '退款中',
'refunded': '已退款'
};
export function getOrderStatus(value: string) {
return statusMap[value] || '未知';
}
```
在优化后的代码中,我们将状态码与对应的中文状态存储在一个对象中,并将对象作为函数的一部分。函数中直接根据状态码从对象中取出对应的中文状态,如果找不到则返回默认值 '未知'。
这样做的好处是,圈复杂度得以降低,代码也变得更加简洁易懂。同时,如果需要新增或修改状态码,只需要修改对象中对应的属性即可,不需要修改 switch 语句中的代码,从而降低了维护成本。
相关问题
export function getOrderStatus(value: string) { switch (value) { case 'pmt_incomplete': return '待支付'; case 'pmt_complete': return '待确认'; case 'un_used': return '待出行'; case 'used': return '已关闭'; case 'finish': return '已关闭'; case 'cancel': return '已取消'; case 'refunding': return '退款中'; case 'refunded': return '已退款'; default: return '未知'; }
这是一个 JavaScript/TypeScript 的函数,用于将订单状态码转换成对应的中文状态。函数的实现比较简单,它接受一个字符串类型的参数 value,然后根据不同的 value 值返回相应的中文状态。
具体来说,函数中使用了 switch 语句来匹配 value 值,并根据不同的值返回相应的中文状态。如果 value 值无法匹配任何一个 case,则返回默认值 '未知'。
该函数可以用于前端开发中,比如将订单状态码显示成易于理解的中文状态,提高用户体验。同时,它也可以用于后端开发中,比如将订单状态码转换成中文状态后返回给前端,减少前后端沟通和翻译的成本。
const statusMap = { pmt_incomplete: '待支付', pmt_complete: '待确认', un_used: '待出行', used: '已关闭', finish: '已关闭', cancel: '已取消', refunding: '退款中', refunded: '已退款', } /** * @param value * @param status */ export function getOrderStatus(value: string) { return statusMap[value] || '未知'; } 提示报错 Element implicitly has an 'any' type because expression of type 'string' can't be used to index type
这个报错是因为 TypeScript 无法确定 `value` 参数一定是 `statusMap` 对象中的一个有效键。为了解决这个问题,可以为 `statusMap` 指定键的类型,例如:
```
const statusMap: { [key: string]: string } = {
pmt_incomplete: '待支付',
pmt_complete: '待确认',
un_used: '待出行',
used: '已关闭',
finish: '已关闭',
cancel: '已取消',
refunding: '退款中',
refunded: '已退款'
};
```
这样就可以避免报错了。