js中多条件对应相同返回值的优化写法
2022/4/21 23:16:38
本文主要是介绍js中多条件对应相同返回值的优化写法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
需求描述
设计一种通用的、处理多条件具有相同行为的分支结构,示例场景:根据月份返回季节,1-3月返回春天,...
分析
- 方法1:if...else if...else 首先排除,可读性和扩展性太差
- 方法2:switch 扩展性更好,但可读性不是太好,且switch结构的终止语句可有可没有的语法可能导致潜在的异常
- 方法3:对象属性语法的可读性和扩展性都比较好,但是需要重复书写相同的行为
最终决定,基于方法3的对象语法做改进:
- 维护条件和行为使用对象数组的形式:具体行为可以使用标志符代替,方便后续直接根据标志符调用相应的行为方法
{
行为标识符1: [条件a1,条件a2, ... ],
行为标识符2: [条件b1,条件b2, ... ],
}
- 定义一个通用的转换方法,将1中的对象转换成一对一映射结构的Object对象(或者映射等类型的对象)
- 基于2返回的Object对象(或其他类型的对象),使用三目运算符返回相应的行为标识符或默认值
实现
以“月份——季节”举例:
// 转换方法 function transOptions(options) { let newOptions = {}; for (const action in options) { options[action].forEach(condition => (newOptions[condition] = action)); } return newOptions; } // 判断方法 function getSeason(month) { const options = { spring: [1,2,3], summer: [4,5,6], autumn: [7,8,9], winter: [10,11,12], } let newOptions = transOptions(options); return newOptions[month] ? newOptions[month] : handleUnexpectedMonth(month); // 意外的月份值可以调用其他方法处理 }
改进
这里的 options 可以使用 Map 类型,使得键的类型更加广泛,如数字、对象等,对于非字符串类型的条件和多元条件判定更为实用:
// 转换方法 function transOptionsMap(options) { let newOptions = new Map(); for (const [action, conditions] of [...options.entries()]) { conditions.forEach(condition => newOptions.set(condition, action)); } return newOptions; } // 判断方法 function getSeason(month) { const options = new Map([ // 1,2,3,4表示第N个季度 [1, [1,2,3]], [2, [4,5,6]], [3, [7,8,9]], [4, [10,11,12]], ]); let newOptions = transOptionsMap(options); return options.get(month) ? options.get(month) : handleUnexpectedMonth(month); // 意外的月份值可以调用其他方法处理 }
这篇关于js中多条件对应相同返回值的优化写法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15基于JSON的大型语言模型代理与Ollama及LangChain的应用
- 2024-11-15useCallback教程:React Hook入门与实践
- 2024-11-15React中使用useContext开发:初学者指南
- 2024-11-15拖拽排序js案例详解:新手入门教程
- 2024-11-15React中的自定义Hooks案例详解
- 2024-11-14受控组件项目实战:从零开始打造你的第一个React项目
- 2024-11-14React中useEffect开发入门教程
- 2024-11-14React中的useMemo教程:从入门到实践
- 2024-11-14useReducer开发入门教程:轻松掌握React中的useReducer
- 2024-11-14useRef开发入门教程:轻松掌握React中的useRef用法