We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
比如判一个值是否在9-12或者14-18里面 之前做法是
let num1= 15 let num2= 13 if((num1>=9&&num1<=12)||(num1>=14&&num1<=18)){ // 数字在范围内 } if((num2>=9&&num2<=12)||(num2>=14&&num2<=18)){ // 数字在范围内 }
现在可以用some 进行封装一下
function handleCheckRange(num, ...ranges){ return ranges.some(item=>num>=item[0]&&num<=item[1]) } handleCheckRange(num1,[9,12],[14,18]) //true handleCheckRange(num2,[9,12],[14,18]) //false
这样写貌似没什么问题,如果以后时间变了,或者又有其他需求,还是要这样写一下,
相信大家都会遇到可能会有多个条件组合的问题
比如有一个参与热卖活动赠积分活动,活动状态(status),预热中(status=1),进行中(status=2)。用户类型(type)也有分普通用户(type=1)vip用户(type=2)
规则是: 1.在预热中参与活动,vip用户赠送1000积分,普通用户赠送700积分。 1.在进行中参与活动,vip用户赠送800积分,普通用户赠送300积分。
之前写法是
let status=1 let type=2 if(status===1){ if(type===1){ console.log('普通用户在预售中参与活动,赠送700积分') } else if(type===2){ console.log('vip用户在预售中参与活动,赠送1000积分') } } else if(status===2){ if(type===1){ console.log('普通用户在进行中参与活动,赠送300积分') } else if(type===2){ console.log('vip用户在进行中参与活动,赠送800积分') } } // 或者 if(status===1&&type===1){ console.log('普通用户在预售中参与活动,赠送700积分') } else if(status===1&&type===2){ console.log('vip用户在预售中参与活动,赠送1000积分') } else if(status===2&&type===1){ console.log('普通用户在进行中参与活动,赠送300积分') } else if(status===2&&type===2){ console.log('vip用户在进行中参与活动,赠送800积分') }
但是现在可以使用 obj写法
let obj={ 'status=1&type=1':'普通用户在预售中参与活动,赠送700积分', 'status=1&type=2':'vip用户在预售中参与活动,赠送1000积分', 'status=2&type=1':'普通用户在进行中参与活动,赠送300积分', 'status=2&type=2':'普通用户在进行中参与活动,赠送800积分' }
console.log(obj[status=${status}&type=${type}])
status=${status}&type=${type}
比如输如一个城市名字,输出一个省份名称
let city='广州' if(city==='广州'||city==='佛山'){ console.log('广东') } else if(city==='海口'||city==='三亚'){ console.log('海南') }
这样写的弊端就是,如果if-else 数量一多,代码就会多,而且判断的条件会变得很长,还有一个问题就是风格有可能不会统一
下面用其他方法进行优化下 方法一
let arr=[ { city:'广州', province:'广东' }, { city:'佛山', province:'广东' }, { city:'海口', province:'海南' }, { city:'三亚', province:'海南' } ] console.log(arr.filter(item=>item.city===city)[0].province)//广东
方法二
方式一 let city='广州' let obj={ '广州':'广东', '佛山':'广东', '海口':'海南', '三亚':'海南', } console.log(obj[city])// 广东 // 方式二------------------------------------ let obj={ '广州,佛山':'广东', '海口,三亚':'海南', } for(let key in obj){ if(key.includes(city)){ console.log(obj[key]) break } } //广东 //这个方法是有bug的,比如 city='州' for(let key in obj){ if(key.includes(city)){ console.log(obj[key]) break } } // 广东 // 解决这个问题很简单,可以使用Map city='广州' let map=new Map([ [['广州','佛山'],'广东'], [['海口','三亚'],'海南'], ]) for (let key of map.keys()) { if(key.includes(city)){ console.log(obj[key]) break } } //广东
[浅析]特定场景下取代if-else和switch的方案 JavaScript 复杂判断的更优雅写法
The text was updated successfully, but these errors were encountered:
No branches or pull requests
1.范围查询
比如判一个值是否在9-12或者14-18里面
之前做法是
现在可以用some 进行封装一下
这样写貌似没什么问题,如果以后时间变了,或者又有其他需求,还是要这样写一下,
2.多条件查询
相信大家都会遇到可能会有多个条件组合的问题
比如有一个参与热卖活动赠积分活动,活动状态(status),预热中(status=1),进行中(status=2)。用户类型(type)也有分普通用户(type=1)vip用户(type=2)
规则是:
1.在预热中参与活动,vip用户赠送1000积分,普通用户赠送700积分。
1.在进行中参与活动,vip用户赠送800积分,普通用户赠送300积分。
之前写法是
但是现在可以使用 obj写法
console.log(obj[
status=${status}&type=${type}
])多个或条件
比如输如一个城市名字,输出一个省份名称
这样写的弊端就是,如果if-else 数量一多,代码就会多,而且判断的条件会变得很长,还有一个问题就是风格有可能不会统一
下面用其他方法进行优化下
方法一
方法二
参考链接
[浅析]特定场景下取代if-else和switch的方案
JavaScript 复杂判断的更优雅写法
The text was updated successfully, but these errors were encountered: