You need to enable JavaScript to run this app. 无if/switch语句实现输入值判断返回的代码改写 编程面试题咨询
优惠活动
大模型
产品
解决方案
定价
更多

无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好太多

其他能跑但不推荐的写法

  1. 靠逻辑短路堆出来的写法,虽然也没有分支,但可读性很差:
    return (x == 9 && "3") || (x == 3 && "9") || "not valid";
    
    这种写法硬编码了所有判断逻辑,后续加规则要改一大串表达式,面试官看到只会觉得你会抠语法,不会想到用数据结构简化逻辑。
  2. 拿数组当存储的写法,仅适合当前场景:
    const resArr = [];
    resArr[9] = "3";
    resArr[3] = "9";
    return resArr[x] || "not valid";
    
    这个写法坑很多:如果以后返回值有空串、0这类falsy值,直接就会命中默认返回值,逻辑完全错掉,通用性差得很。

提醒:不管用哪种写法,都要保证和原代码的执行顺序一致,别漏了第一个if没有else的逻辑细节,不然跑出来结果不对,面试直接扣分。


内容的提问来源于stack exchange,提问作者ror roro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 00:06:10