今天在群里看到了一个多if的代码,然后群友给出了几种不同的优化方式,故而在此记录一下

以上是需要优化的代码
方案一:

简单明了,将key
与value
拼接,然后通过独享去枚举,然后取type
的值
方案二:

将typeNum
的多种值都罗列出来,然后再将该类型下的多种情况罗列出来,最后取值,在取值之前先判断了当前typeNum
获取到的数据是否是对象,如果是就通过typeNum
与typeValue
一起取值,如果不是直接通过typeNum
取值返回
方案三:
我自己书写的方式,可能不太好理解,主要是通过Object.values()
与Object.keys()
实现,下面贴出代码
js
let jieXiTypeMap = {
1:{
9: '采购入库',
10: '采购退回'
},
2: 13,
3:{
11: '销售出库',
12: '销售退货'
},
4: 14
}
function getJieXiType(typeNum,typeValue){
if(typeValue){
let typeValueArr = Object.values(jieXiTypeMap[typeNum]);
let currentTypeArr = Object.keys(jieXiTypeMap[typeNum]);
return currentTypeArr[typeValueArr?.indexOf(typeValue)] ? currentTypeArr[typeValueArr?.indexOf(typeValue)] : null
}else{
return jieXiTypeMap[typeNum] || null
}
}
console.log("🚀 ### ~ getJieXiType(1):", getJieXiType(1,'测试'))
因为这里我不太想使用中文去定义key
,然后写了这种可以放在公共uilts
中的方式,上面这里的代码主要是通过获取对象的key
与value
来进行处理,如果有typeValue
字段,就通过Object.keys()
与Object.values
获取对象的key
与value
值,然后通过数组的indexOf
获取当前typeValue
所在下标,然后去Object.keys()
数组中获取对应的jieXiType
,如果没有typeValue
数据则直接取枚举对象中的值