javascript - 使用 map 去除复杂的 if 语句
问题描述
我正在写一个相当复杂的方法,遇到了复杂逻辑判断的情况。
一般我可以使用if/else或者switch来实现多个条件判断,但是会有一个问题:随着逻辑复杂度的增加,代码中的if/else和switch会越来越臃肿。
其次,我的分支机构覆盖率统计数据到处都是,因为伊斯坦布尔报告(我认为是错误的)它无法触及其他一些分支机构。
还有哪些其他方法可以提供帮助?到目前为止,我遇到的是使用地图,但我不确定如何在地图的上下文中执行代码块。
static filterCourseContentElementButtonEvents(
courseContents: ICourseContent[],
courseContentElementButtonEvent: {
id: CourseContentElementButtonEventType;
value: CourseContentElementButtonEventTypeValue;
}[],
selectedCourseContentUid: string
): {
id: CourseContentElementButtonEventType;
value: CourseContentElementButtonEventTypeValue;
}[] {
if (!CourseContentElementButtonService.isPreviousButtonEventTypeAvailable(
courseContents,
selectedCourseContentUid
)) {
courseContentElementButtonEvent = CourseContentElementButtonService.deleteCourseContentElementButtonEvent(
courseContentElementButtonEvent,
CourseContentElementButtonEventType.PREVIOUS
);
}
if (!CourseContentElementButtonService.isNextButtonEventTypeAvailable(
courseContents,
selectedCourseContentUid
)) {
courseContentElementButtonEvent = CourseContentElementButtonService.deleteCourseContentElementButtonEvent(
courseContentElementButtonEvent,
CourseContentElementButtonEventType.NEXT
);
}
if (!CourseContentElementButtonService.isJumpButtonEventTypeAvailable(
courseContents,
selectedCourseContentUid
)) {
courseContentElementButtonEvent = CourseContentElementButtonService.deleteCourseContentElementButtonEvent(
courseContentElementButtonEvent,
CourseContentElementButtonEventType.JUMP
);
}
if (!CourseContentElementButtonService.isSubmitButtonEventTypeAvailable(
courseContents,
selectedCourseContentUid
)) {
courseContentElementButtonEvent = CourseContentElementButtonService.deleteCourseContentElementButtonEvent(
courseContentElementButtonEvent,
CourseContentElementButtonEventType.SUBMIT_RESPONSE
);
}
if (!CourseContentElementButtonService.isEndButtonEventTypeAvailable(
courseContents,
selectedCourseContentUid
)) {
courseContentElementButtonEvent = CourseContentElementButtonService.deleteCourseContentElementButtonEvent(
courseContentElementButtonEvent,
CourseContentElementButtonEventType.END
);
}
return courseContentElementButtonEvent;
}
解决方案
也许是这样的(当然不完整)
const deleteEventIfNotAvaiable = (type, contents, contentUid, buttonEvent, buttonEventType) => {
const isAvailable = CourseContentElementButtonService[`is${type}ButtonEventTypeAvailable`](
contents, contentUid
)
return isAvailable ? null : CourseContentElementButtonService.deleteCourseContentElementButtonEvent(
buttonEvent, buttonEventType[type.toUpperCase()]
);
}
...
['Previous','Next'...].forEach(type => courseContentElementButtonEvent = deleteEventIfNotAvaiable(
type,
courseContents,
selectedCourseContentUid,
courseContentElementButtonEvent,
CourseContentElementButtonEventType)
)
推荐阅读
- ssis - 对于每个循环容器 - 动态文件夹
- tailwind-css - 顺风,删除一些重复的类
- amazon-web-services - AWS MFA 策略明确拒绝影响整个账户
- r - 如何根据R中的分组和顺序将字符添加到列中每个字符串的末尾?
- python-3.x - 解析 URL 参数会更改 Python 中的值
- python-3.x - 关于while循环的时间卡代码python练习问题
- sql-server - 如何使用 SQL 连接模拟 Dapper
- python - python中的老虎机程序
- javascript - 我的 JavaScript 目录未正确链接到我的 HTML 代码。不知道为什么
- mysql - 替换 mysql 中的 substring_index