JavaScript中替代多条件if-else处理两变量组合的高效方案咨询
替代多条件if-else的高效方案
在JavaScript中,针对这种有限枚举值的条件判断,最高效且易维护的方式是使用映射表,以下是几种实用方案:
1. 对象键映射(推荐)
通过将a和b的组合拼接成唯一字符串作为对象的键,直接映射到对应的结果值,查找效率为O(1),代码简洁直观:
var a = "active"; var b = "locked"; var outcome = ""; // 定义条件-结果映射表 const resultMap = { "active_active": "a", "active_locked": "b", "active_disabled": "c", "inactive_active": "d", "inactive_disabled": "e", "inactive_locked": "f" }; // 获取结果,可添加默认值处理未匹配的异常情况 outcome = resultMap[`${a}_${b}`] || "";
优势:新增或修改条件时,只需在映射对象中添加/修改键值对即可,无需调整逻辑代码,维护成本极低。
2. 二维数组映射
如果需要更直观地展示a和b的对应关系,可以用二维数组配合索引映射:
var a = "inactive"; var b = "disabled"; var outcome = ""; // 为枚举值建立索引映射 const aIndex = { active: 0, inactive: 1 }; const bIndex = { active: 0, locked: 1, disabled: 2 }; // 二维数组存储结果,行对应a的取值,列对应b的取值 const resultMatrix = [ ["a", "b", "c"], // a=active时,b分别为active/locked/disabled的结果 ["d", "f", "e"] // a=inactive时,b分别为active/locked/disabled的结果 ]; // 安全取值(可选链式操作避免索引不存在报错) outcome = resultMatrix[aIndex[a]]?.[bIndex[b]] || "";
优势:条件对应关系可视化强,适合需要快速核对枚举值组合的场景,取值效率同样为O(1)。
3. ES6 Map结构(可选)
如果需要使用非字符串类型的键(这里其实没必要,但可以作为扩展方案),可以用Map存储键值对:
var a = "inactive"; var b = "active"; var outcome = ""; const resultMap = new Map([ [["active", "active"], "a"], [["active", "locked"], "b"], [["active", "disabled"], "c"], [["inactive", "active"], "d"], [["inactive", "disabled"], "e"], [["inactive", "locked"], "f"] ]); // 注意:数组作为Map键时是按引用匹配,因此更可靠的方式是遍历查找 outcome = Array.from(resultMap).find(([key]) => key[0] === a && key[1] === b)?.[1] || "";
这种方式的效率略低于对象键映射,仅在特殊场景下使用。
内容的提问来源于stack exchange,提问作者Karan Nayyar
相关产品推荐
相关产品推荐

