如何对单个变量设置多逻辑条件且不在if语句中重复写变量名
可实现目标的几种方案(均兼容值类型与引用类型)
方案1:封装通用校验工具函数(推荐,复用性最高)
封装一个可自定义规则的校验函数,后续所有同类场景都可以直接调用,仅需要传入一次变量:
// 基础版:针对数值范围+排除值的场景 function isMatch(val, min, max, excludeList = []) { return val > min && val < max && !excludeList.includes(val); } // 调用示例 const veryLongVariableName = 7; if (isMatch(veryLongVariableName, 5, 18, [13])) { // do something... }
如果需要适配引用类型或者更复杂的校验规则,可以扩展为支持传入自定义校验回调的版本:
// 通用版:支持任意类型、任意校验规则 function validate(val, rules) { return rules.every(rule => rule(val)); } // 引用类型使用示例,比如校验用户对象是否符合要求 const user = { age: 7, name: "小明" }; if (validate(user, [ u => u.age > 5, u => u.age < 18, u => u.age !== 13, u => u.name.length > 1 ])) { // do something... }
方案2:临时短变量替代(无额外封装成本)
如果不想新增工具函数,可以用块级作用域声明一个短变量指代长变量名,不会污染外部作用域:
const veryLongVariableName = 7; { const v = veryLongVariableName; if (v > 5 && v < 18 && v != 13) { // do something... } } // 块外部无法访问变量v
方案3:数组链式校验(适合动态规则场景)
如果校验规则是动态生成的,可以直接用数组的every方法做校验,仅需要传入一次变量:
const veryLongVariableName = 7; if ([ v => v > 5, v => v < 18, v => v != 13 ].every(fn => fn(veryLongVariableName))) { // do something... }
内容的提问来源于stack exchange,提问作者Kuba K
相关产品推荐
相关产品推荐

