const someFailedAction = (caseIds, growlMessages) => {
if (caseIds.length > 1) {
toastr.error(growlMessages[0], errorToastrOptions);
} else if (isCaseDetailsDisplayed) {
toastr.error(growlMessages[1], errorToastrOptions);
} else if (errorParts.fieldIds.length === 0) {
toastr.error(growlMessages[2], errorToastrOptions);
} else {
toastr.error(growlMessages[3], errorToastrOptions);
}
}
我有一堆条件语句,如上面的语句,它们在不同案例操作失败时执行。大多数操作具有相同的 if/elseIf 结构,但有些操作具有额外的 elseIf 或减去一个或多个。
const SomeOtherFailedAction = (caseIds, growlMessages) => {
if (caseIds.length > 1) {
toastr.error(growlMessages[0], errorToastrOptions);
} else if (isCaseDetailsDisplayed) {
toastr.error(growlMessages[1], errorToastrOptions);
} else {
toastr.error(growlMessages[2], errorToastrOptions);
}
}
我想知道是否有一个好的设计模式,我可以只传递消息的类型和数组,而不必使用冗长、嵌套、重复的 switch 语句。
最佳答案
只需使用 bool 数组并找到成功的索引:
const i = [
caseIds.length > 1,
isCaseDetailsDisplayed,
errorParts.fieldIds.length === 0,
true
].indexOf(true);
toastr.error(growlMessages[i], errorToastrOptions)
或者,您可以存储一个可重用的函数数组,一个接一个地执行并返回函数返回 true 的第一个索引:
const tests = [
() => caseIds.length > 1,
() => isCaseDetailsDisplayed,
() => errorParts.fieldIds.length === 0,
() => true
]
const i = tests.findIndex(f => f());
toastr.error(growlMessages[i], errorToastrOptions)
关于javascript - 什么是传递类型、通过一些条件并返回对象的良好设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48025318/