JS中使用Switch...Case方式进行多条件判断的常见缺点是比较冗长,不够简洁和优雅。本文将为大家介绍一种利用对象字面量来进行多条件判断的方式,来让代码更加优雅和易读。
使用对象字面量进行多条件判断的写法
使用对象字面量方式进行多条件判断,我们可以通过JS对象属性来表示条件判断中的每个case,通过函数属性来表示每个case对应的逻辑操作。示例如下:
const multiCondition = {
caseA() {
//TODO
},
caseB() {
//TODO
},
caseC() {
//TODO
},
default() {
//TODO
}
}
function executeCase (condition) {
if (multiCondition[condition]) {
multiCondition[condition]()
} else {
multiCondition['default']()
}
}
上述代码中,multiCondition对象中分别定义了caseA、caseB、caseC和default四个函数属性,分别对应条件判断中的各个case和default。executeCase函数是一个对外暴露的函数,参数为condition,表示当前需要执行的case。函数内部进行更具当前条件判断不同的操作。
举例说明
下面来演示一个更加具体的场景:针对不同商品在购买时,需要计算其价格和折扣,并在订单中记录下来。这时候我们可以通过switch...case的方式实现:
const calculatePriceAndDiscount = (product, quantity) => {
let price = 0
let discount = 0
switch (product) {
case 'cup':
price = 5
discount = quantity >= 10 ? 0.05 : 0
break
case 'pen':
price = 2
discount = quantity >= 20 ? 0.1 : 0
break
case 'book':
price = 10
discount = quantity >= 5 ? 0.03 : 0
break
default:
console.log('Invalid product')
break
}
const payment = (1 - discount) * price * quantity
return {price, discount, payment}
}
以上是传统方式的Switch...Case实现,当有新增product或需对既有case进行修改时,需要额外修改代码。而使用对象字面量进行多条件判断代码如下:
const calculatePriceAndDiscount = (product, quantity) => {
const products = {
cup: () => {
return {price: 5, discount: quantity >= 10 ? 0.05 : 0}
},
pen: () => {
return {price: 2, discount: quantity >= 20 ? 0.1 : 0}
},
book: () => {
return {price: 10, discount: quantity >= 5 ? 0.03 : 0}
},
default: () => {
console.log('Invalid product')
return {price: 0, discount: 0}
}
}
const {price, discount} = products[product]() || products['default']()
const payment = (1 - discount) * price * quantity
return {price, discount, payment}
}
我们可以注意到,使用对象字面量方式进行多条件判断可以通过加入属性的方式,更加灵活地对代码进行修改和适应场景变化。
以上就是“JS中比Switch...Case更优雅的多条件判断写法”的攻略,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中比Switch…Case更优雅的多条件判断写法 - Python技术站