JavaScript Switch语句能否重复使用同一case?
解决Switch语句中通用配置与特殊属性的复用问题
我完全懂你这种困扰——当一开始为了复用把多个type归在同一个switch case里,后来要逐个给它们加特殊属性时,要么得把case拆开来重复写通用代码,要么就得在同一个case里加一堆条件判断,代码瞬间变得乱糟糟的。
方案1:拆分通用逻辑与特殊逻辑的双Switch写法
最直接的思路是把通用配置和特殊属性拆成两个独立的switch块:先处理所有共享的默认设置,再单独为每个type补充专属配置。这样既保留了通用逻辑的复用,又能灵活修改单个type的特殊属性,不会产生重复代码。
示例代码:
function setDefaultSettings(type) { const settings = {}; // 第一步:处理通用共享配置,按组归类 switch(type) { case 'typeA': case 'typeB': case 'typeC': settings.backgroundColor = '#ffffff'; settings.fontSize = '14px'; settings.padding = '8px 12px'; break; case 'typeD': case 'typeE': settings.backgroundColor = '#2d3748'; settings.fontSize = '16px'; settings.color = '#ffffff'; break; // 其他通用配置组 } // 第二步:单独处理每个type的特殊属性 switch(type) { case 'typeA': settings.borderRadius = '4px'; break; case 'typeB': settings.boxShadow = '0 2px 4px rgba(0,0,0,0.1)'; break; case 'typeC': settings.textAlign = 'center'; break; case 'typeD': settings.border = '1px solid #4a5568'; break; // 其他type的特殊配置 } return settings; }
这种写法的优势是逻辑清晰,改动成本低:要调整通用配置只需要修改第一个switch,要加单个type的特殊属性只需要在第二个switch里加case,完全不会影响其他逻辑。
方案2:用配置对象重构(更优雅的长期方案)
如果你的type数量较多、配置项复杂,推荐用配置对象映射的方式替代switch,这种方式的可维护性更强,代码也更简洁:
// 1. 定义通用配置组 const commonConfigGroups = { lightTheme: { backgroundColor: '#ffffff', fontSize: '14px', padding: '8px 12px' }, darkTheme: { backgroundColor: '#2d3748', fontSize: '16px', color: '#ffffff' } }; // 2. 映射每个type对应的通用组 const typeToGroupMap = { typeA: 'lightTheme', typeB: 'lightTheme', typeC: 'lightTheme', typeD: 'darkTheme', typeE: 'darkTheme' }; // 3. 定义每个type的特殊配置 const specialTypeConfigs = { typeA: { borderRadius: '4px' }, typeB: { boxShadow: '0 2px 4px rgba(0,0,0,0.1)' }, typeC: { textAlign: 'center' }, typeD: { border: '1px solid #4a5568' } }; function setDefaultSettings(type) { // 获取通用配置(默认空对象) const baseConfig = commonConfigGroups[typeToGroupMap[type]] || {}; // 获取特殊配置(默认空对象) const specialConfig = specialTypeConfigs[type] || {}; // 合并配置:特殊配置会覆盖通用配置中同名的属性 return { ...baseConfig, ...specialConfig }; }
这种方案的好处在于:
- 所有配置都集中在对象里,一目了然,修改时不需要动函数逻辑
- 新增type只需要在映射表和特殊配置里加条目,完全符合开放封闭原则
- 配置可以单独抽离成文件,更适合大型项目的模块化管理
内容的提问来源于stack exchange,提问作者Dennis Smolek
相关产品推荐
相关产品推荐

