如何优雅简化多变量等值判断或单变量多值匹配逻辑?
两种条件判断的简洁实现方案
一、多变量同值判断(if(var1 == 1 && var2 == 1 && var3 == 1))
针对多个变量都等于同一个值的场景,这些写法能让代码更简洁:
- 数组every方法(JS/TS等):
用数组包裹所有变量,通过if ([var1, var2, var3].every(v => v === 1))every方法检查所有元素是否满足等于目标值的条件,变量越多越能体现简洁性,可读性也不错。 - 自定义复用函数:
如果多处需要这种判断,可以封装一个小函数:function allEqual(target, ...args) { return args.every(v => v === target); } // 调用 if (allEqual(1, var1, var2, var3)) - 数学运算(仅限数字类型且无歧义场景):
注意:这个方法有局限性,只有当变量不可能出现其他相加等于3的组合时才适用(比如变量只能是0或1),否则会出现误判,谨慎使用。if (var1 + var2 + var3 === 3)
二、单变量多值判断(if(var1 == 1 || var1 == 4 || var1 == 6))
针对单个变量匹配多个候选值的场景,这些写法更清爽:
- 数组includes方法(JS/TS等):
这是最常用的简洁写法,直观易懂,比一串if ([1, 4, 6].includes(var1))||整洁很多。 - Set集合查找(高频判断场景):
Set的查找性能比数组const validValues = new Set([1, 4, 6]); // 多次判断时复用这个Set if (validValues.has(var1))includes更高,适合需要反复判断同一批值的场景。 - in运算符(Python等语言):
在Python里可以直接用成员运算符:
集合的成员查找效率同样很高,代码也极简。if var1 in {1, 4, 6}: - 位运算技巧(极端性能需求,不推荐日常使用):
如果值是较小的整数,可以用位掩码实现,但可读性极差,仅适合性能敏感的底层场景:// 1、4、6对应的位掩码是 1<<1 | 1<<4 | 1<<6 = 2 + 16 + 64 = 82 if ((82 & (1 << var1)) !== 0)
内容的提问来源于stack exchange,提问作者KemVolt
相关产品推荐
相关产品推荐

