无if/switch语句实现输入值判断返回的代码改写 编程面试题咨询
无if/switch版本的实现方案
这道题根本不需要硬抠条件分支语法,原逻辑本质是固定的输入输出对应关系,用数据查找的思路就能完全替代if和switch。
先对齐原代码的实际执行逻辑
别上来就改,先把原逻辑的执行顺序理清楚,避免改完出现偏差:
- 只要x等于9,直接返回"3",后续判断全部跳过
- 如果x不等于9,才继续判断:x等于3就返回"9"
- 剩下的所有输入,统一返回"not valid"
最稳妥的实现:字典映射替代分支
把输入和输出的对应关系提前存在映射结构里,靠语言内置的查找逻辑取值,全程不用写任何if或者switch:
// 提前把规则存成键值对 const ruleMap = { 9: "3", 3: "9" }; // 直接取值,没命中规则就返回默认值,没有任何分支语句 return ruleMap[x] ?? "not valid";
这个方案面试里拿满分完全够:
- 完全符合无if/switch的要求
- 和原代码逻辑100%等价,没有边界错误
- 后续要加新的判断规则,只需要往ruleMap里加键值对就行,不用改核心代码,可维护性比写一堆if好太多
其他能跑但不推荐的写法
- 靠逻辑短路堆出来的写法,虽然也没有分支,但可读性很差:
这种写法硬编码了所有判断逻辑,后续加规则要改一大串表达式,面试官看到只会觉得你会抠语法,不会想到用数据结构简化逻辑。return (x == 9 && "3") || (x == 3 && "9") || "not valid"; - 拿数组当存储的写法,仅适合当前场景:
这个写法坑很多:如果以后返回值有空串、0这类falsy值,直接就会命中默认返回值,逻辑完全错掉,通用性差得很。const resArr = []; resArr[9] = "3"; resArr[3] = "9"; return resArr[x] || "not valid";
提醒:不管用哪种写法,都要保证和原代码的执行顺序一致,别漏了第一个if没有else的逻辑细节,不然跑出来结果不对,面试直接扣分。
内容的提问来源于stack exchange,提问作者ror roro
相关产品推荐
相关产品推荐

