对象映射替代多条件判断的核心是将“条件→结果/行为”转为键值对,通过属性访问直接获取值或执行函数;支持静态值映射、函数映射、Map动态键映射及数组批量映射。

用对象映射替代多条件判断,核心是把“条件 → 结果”或“条件 → 行为”变成键值对,靠属性访问([])直接取值或执行,跳过逐条比对。
映射静态值:适合状态转文案、码值转描述
当每个条件对应一个固定返回值(比如状态码转中文提示),对象字面量最轻量:
- 定义一个对象,key 是条件值,value 是你要返回的内容
- 用
map[condition]获取结果,配合||提供默认值 - 避免重复写
if (x === 'a') ... else if (x === 'b') ...
示例:
const statusText = {<br> success: '操作成功',<br> error: '发生错误',<br> pending: '处理中'<br>};<br><br>function getMessage(status) {<br> return statusText[status] || '未知状态';<br>}映射函数:适合不同条件触发不同操作
当每个分支要执行不同逻辑(比如调 API、跳路由、弹窗),可以把函数作为 value 存进对象:
- 每个 key 对应一个行为函数,不带参数或统一接收参数
- 查到函数后立即调用,例如
handlers[code](data) - 天然解耦判断逻辑和具体动作,方便单元测试和后期增删
示例:
const handlers = {<br> 200: (data) => console.log('成功:', data),<br> 401: () => window.location.href = '/login',<br> 404: () => alert('页面不存在')<br>};<br><br>function handleResponse({ code, data }) {<br> const handler = handlers[code];<br> if (handler) handler(data);<br> else console.warn('未处理的状态码:', code);<br>}用 Map 替代普通对象:需要动态 key 或非字符串条件时
普通对象只支持字符串/符号作 key,而 Map 支持任意类型(数字、布尔、对象、甚至函数):
- 适合用数字状态码、布尔标记、甚至自定义对象实例作条件
- 创建后可用
map.get(key)安全取值,比obj[key]更严谨 - 尤其在类型敏感或 key 可能为
null/undefined时更可靠
示例:
const actionMap = new Map();<br>actionMap.set(true, () => console.log('开启'));<br>actionMap.set(false, () => console.log('关闭'));<br>actionMap.set(42, () => console.log('特殊指令'));<br><br>function runAction(flag) {<br> const action = actionMap.get(flag);<br> if (action) action();<br>}结合数组遍历做批量映射:如 DNA 转录、字符替换
当输入是一串可迭代数据(如字符串、数组),且每个元素需独立映射,配合 .map() 效率高又清晰:
- 先建好单字符映射表(对象或 Map)
- 再对输入逐项查表,组合结果
- 避免用
if-else套循环,也防止误用includes导致全局误判
示例(DNA → RNA):
const dnaToRna = { A: 'U', T: 'A', C: 'G', G: 'C' };<br>function transcribe(dna) {<br> return dna<br> .split('')<br> .map(char => dnaToRna[char] || char)<br> .join('');<br>}<br>// transcribe('ATCG') → 'UAGC'











