嵌套switch命令脚本无输出问题求助:两段代码均失效
问题诊断与修复方案
第一段脚本问题
外层switch的case "B"、case "M"、case "2nd"分支没有加break,导致执行完当前分支后会继续向下执行后续分支,最终走到default分支,把event.value覆盖为Floor Location的原始值,所以看不到预期输出。
修复后的第一段脚本
switch (this.getField("Floor Location").value) { case "-": event.value = "-"; break; case "B": switch (this.getField("Storeys").value) { case "-": event.value = "-"; break; case "One Storey": event.value = "11"; break; case "Two Storeys": event.value = "17"; break; } break; // 添加break终止当前case执行 case "M": switch (this.getField("Storeys").value) { case "-": event.value = "-"; break; case "One Storey": event.value = "1"; break; case "Two Storeys": event.value = "11"; break; } break; // 添加break case "2nd": switch (this.getField("Storeys").value) { case "-": event.value = "-"; break; case "One Storey": event.value = "_"; break; case "Two Storeys": event.value = "1"; break; } break; // 添加break default: event.value = this.getField("Floor Location").value; break; }
第二段脚本问题
- 赋值/比较混淆:所有
if判断里用了赋值运算符=,而非比较运算符===,导致变量被强制赋值,逻辑完全错误。 - if语句冗余分号:
if (xxx);后面的分号导致if块为空,后续变量赋值不受条件控制。 - 变量名大小写不一致:比如定义了
OneStorey,却引用Onestorey;定义TwoStoreys,引用Twostoreys,导致变量未定义错误。 - 变量声明顺序错误:开头
var TwoStoreys = storeys;时storeys还没定义,会抛出引用错误。 - 部分case缺失break:比如
case ((Twostoreys) && (B))后面没加break,会继续执行下一个case。
优化后的替代方案(更简洁易维护)
用对象映射表代替多层switch,逻辑更清晰:
const floorLoc = this.getField("Floor Location").value; const storeys = this.getField("Storeys").value; // 定义映射表:key为[楼层位置, 楼层数]的拼接值,value为对应输出 const valueMap = new Map([ ["-,-", "-"], ["B,-", "-"], ["B,One Storey", "11"], ["B,Two Storeys", "17"], ["M,-", "-"], ["M,One Storey", "1"], ["M,Two Storeys", "11"], ["2nd,-", "-"], ["2nd,One Storey", "_"], ["2nd,Two Storeys", "1"], ]); // 从映射表取值,取不到则用原始楼层位置作为默认值 event.value = valueMap.get(`${floorLoc},${storeys}`) || floorLoc;
内容的提问来源于stack exchange,提问作者Khalique Katchi
相关产品推荐
相关产品推荐

