如何让if语句匹配满足最多条件的分支而非首个符合的分支
解决方案
问题原因
你的代码逻辑问题出在if判断的排序规则错误:你按照「包含条件从少到多」的顺序写分支,只要前面的短条件匹配就会直接return终止执行,永远不会走到后面条件更多的分支。
方案1:调整if判断顺序
最简单的改法是把判断顺序反过来,从包含条件最多的分支开始判断,依次往包含条件更少的分支走,匹配到就直接返回即可。
const determineLevel = () => { const wentToKindergarten = true; const wentToElementary = true; const wentToHighSchool = true; const wentToCollege = false; // 条件最多的放最前面 if (wentToKindergarten && wentToElementary && wentToHighSchool && wentToCollege) { return 4; } if (wentToKindergarten && wentToElementary && wentToHighSchool) { return 3; } if (wentToKindergarten && wentToElementary) { return 2; } if (wentToKindergarten) { return 1; } return; };
方案2:统计满足条件数(更易扩展)
如果后续教育阶段会新增,写大量重复的if判断维护成本很高,可以直接统计满足的条件数量,直接返回对应等级:
const determineLevel = () => { const wentToKindergarten = true; const wentToElementary = true; const wentToHighSchool = true; const wentToCollege = false; // 按顺序把阶段条件放进数组,统计满足的数量 const levelCount = [ wentToKindergarten, wentToElementary, wentToHighSchool, wentToCollege ].filter(Boolean).length; return levelCount || undefined; };
内容的提问来源于stack exchange,提问作者Kenny Quach
相关产品推荐
相关产品推荐

