每天优化一点点之条件判断

99 阅读2分钟

js中的条件判断

  • if - else if - else(多条件判断)使用频率高
  • switch - case(多条件判断)使用频率高
  • do - while(先执行,后判断)使用频率低
  • while(单一判断)使用频率低

上述4种判断逻辑,如果判断嵌套太多我如if或switch我们应该如何优化代码结构

优化方式

  • 通过indexOf
  • 通过includes
  • 通过运算(||、&&、三元表达式)
  • 通过策略模式(object、Map)

indexOf

// indexOf 方法描述 返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回 -1。 
// 用indexOf判断 
const numberList:Array=[1,2,3,4,5,6]; numberList.indexOf(numder); 
// 该方法要注意 indexOf 返回的是匹配到数据的下标,也就是有可能包含0 
numberList.indexOf(1); //0 
// 对于没有匹配到的数据返回为-1 
numberList.indexOf(99); //-1 
// 具体逻辑使用在没有匹配到的情况下 判断是否为-1
numberList.indexOf(99)!== -1 // false 
// 业务场景:如我有个权限列表在页面上判断是否展示该 
const auth:Array(['ADMIN','STRFF']);
<div v-if='auth.indexOf('ADMIN')'>...</div>

includes(推荐)

// includes 方法描述 用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回 false 
// includes 与 indexOf 用法大致相同 对于indexOf例子修改 
const auth:Array(['ADMIN','STRFF']);
<div v-if='auth.includes('ADMIN')'>...</div>

运算相关

// 三元表达式一般用来赋值 const judge:boolean=true;
// || 一般用来做默认值 (如左值为假则展示右值)
{{judge||'/'}}
const HandelEdit=()=>{ return judge||''} 
// && 一般用来做运行判断 (如左值为真则执行右值) 
judge && HandelEdit();

策略模式

// object 关于店铺vip的打折模式 简单模式 
const gather={ "VIP1":0.9, "VIP2":0.8, "VIP3":0.7, "VIP4":0.6, "default":1 } 
/** 
* @description 折扣计算 
* @param price {number} 价格 
* @param level {string} 会员等级 
* @returns lastPrice {number} 最终价格 
**/ 
const imputedPrice = (price:number,level:string)=>{ 
const discount:number=gather[`${level}`]; const lastPrice:number =discount*price 
return lastPrice 
} 
imputedPrice(500,'VIP2') //400
// Map 复杂模式 工资绩效计算 
const mapGather = new Map([ 
["A", (base) => base * 2], 
['B', (base) => base * 1.5], 
['C', (base) => base] ]) 
/** 
* @description 计算绩效 
* @param level {number} 绩效等级 
* @param base {number} 基础工资` `
* @returns salary {number} 最终工资 
**/ 
const calculateSalary = (level, base) => { 
const salary = mapGather.get(`${level}`)(base) return salary 
} 
calculateSalary("A",10000) // 20000 
calculateSalary("B",10000) // 15000 
calculateSalary("C",10000) // 10000