三类条件下的if语句写法咨询:按settings与用户角色实现页面跳转
结论
现有逻辑是正确的,但不是最简洁的写法,还有不少可优化的空间,具体优化建议如下:
优化点1:消除重复代码
三个分支都调用了同一路由跳转方法,只是入参路径不同,可以先计算出目标路径再统一执行跳转,减少重复代码。
优化点2:修复字符串匹配风险
给定的用户角色列表里broker是全小写,现有代码判断用的是首字母大写的Broker,极易出现匹配失败的问题,建议先对角色做标准化处理(统一转大小写),最好将角色、路由路径都定义为常量,避免硬编码字符串出错。
优化点3:简化逻辑判断
可以用三元表达式简化判断逻辑,也可以用规则映射表的写法,后续新增跳转规则时不用修改业务逻辑,更易维护。
优化后代码示例
简洁三元写法(适合固定规则场景)
// 提前定义常量避免硬编码错误 const ROLES = { BROKER: 'broker' } const ROUTES = { PROPERTIES: '/properties', TRANSACTIONS: '/transactions', INDEX: '/index' } this.userService.updateUserProfileSettings(oldUserProfile) .subscribe(res => { // 无用变量确认不需要可直接删除 // const forwardToPage = localStorage.getItem('forwardToPage'); const normalizedRole = role.toLowerCase(); const targetUrl = settings && normalizedRole !== ROLES.BROKER ? ROUTES.PROPERTIES : !settings && normalizedRole === ROLES.BROKER ? ROUTES.TRANSACTIONS : ROUTES.INDEX; this.route.navigateByUrl(targetUrl); })
规则映射写法(适合规则可能扩展的场景)
const ROLES = { BROKER: 'broker' } const ROUTES = { PROPERTIES: '/properties', TRANSACTIONS: '/transactions', INDEX: '/index' } // 跳转规则抽离为独立配置,后续修改规则不用动业务逻辑 const getTargetUrl = (settings, role) => { const normalizedRole = role.toLowerCase(); const ruleKey = `${settings ? 'hasSettings' : 'noSettings'}-${normalizedRole === ROLES.BROKER ? 'isBroker' : 'notBroker'}`; const ruleMap = { 'hasSettings-notBroker': ROUTES.PROPERTIES, 'noSettings-isBroker': ROUTES.TRANSACTIONS, 'noSettings-notBroker': ROUTES.INDEX } // 兜底逻辑避免异常 return ruleMap[ruleKey] || ROUTES.INDEX; } // 业务逻辑部分更简洁 this.userService.updateUserProfileSettings(oldUserProfile) .subscribe(res => { this.route.navigateByUrl(getTargetUrl(settings, role)); })
其他注意事项
如果后续跳转规则会频繁新增调整,更推荐用规则映射的写法,只需要更新映射表即可,不用调整多层if/else或者三元判断逻辑。
内容的提问来源于stack exchange,提问作者user16712184
相关产品推荐
相关产品推荐

