如何在Switch语句中对同一输出应用多个参数?
解决Switch语句中同时应用多种样式的问题
当前函数仅支持单个样式字符串参数,无法处理数组形式的多样式需求。可以通过以下两种方式改造函数,同时兼容单样式和多样式的场景:
方案1:基于样式映射对象 + 遍历处理
把每种样式对应的处理函数存入对象,统一处理单样式和多样式参数,扩展性更强:
function caseStyle(string, style) { // 定义样式与处理函数的映射关系 const styleHandlers = { upper: str => str.toUpperCase(), reversed: str => str.split("").reverse().join("") }; // 统一将样式转为数组,兼容单个字符串的情况 const styles = Array.isArray(style) ? style : [style]; // 遍历所有样式,依次应用处理逻辑 styles.forEach(styleType => { if (styleHandlers[styleType]) { string = styleHandlers[styleType](string); } }); return string; } // 测试用例 console.log(caseStyle("hello", "upper")); // 输出: HELLO console.log(caseStyle("hello", "reversed")); // 输出: olleh console.log(caseStyle("hello", ["upper", "reversed"])); // 输出: OLLEH console.log(caseStyle("hello", ["reversed", "upper"])); // 输出: OLLEH
改动说明
- 用对象映射替代switch语句,后续新增样式只需添加键值对,无需修改分支逻辑
- 通过
Array.isArray统一参数格式,避免重复编写单/多样式的处理逻辑 - 遍历前检查处理函数是否存在,避免无效样式导致的错误
方案2:保留Switch语句的兼容改造
如果想继续使用switch语句,可通过遍历样式数组实现多样式叠加:
function caseStyle(string, style) { function toUpper(str) { return str.toUpperCase(); } function toReversed(str) { return str.split("").reverse().join(""); } // 统一将样式转为数组 const styles = Array.isArray(style) ? style : [style]; // 遍历样式数组,逐个执行switch分支 for (const styleType of styles) { switch (styleType) { case "upper": string = toUpper(string); break; case "reversed": string = toReversed(string); break; // 可在此处添加更多样式分支 } } return string; } // 测试用例 console.log(caseStyle("hello", ["upper", "reversed"])); // 输出: OLLEH
改动说明
- 先统一参数格式为数组,确保遍历逻辑一致
- 用
for...of循环遍历样式,在循环内执行switch分支,实现多样式依次应用
内容的提问来源于stack exchange,提问作者Koji E
相关产品推荐
相关产品推荐

