javascript - 什么是传递类型、通过一些条件并返回对象的良好设计模式

标签 javascript design-patterns

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/

相关文章:

javascript - JavaScript 的 DataView 的 Python 等价物

javascript - 适用于Electron JS的WinRT API “Windows.UI.ViewManagement”?

oop - 打破一个大而有凝聚力的类(Class)

java - 设计模式: Applying behavior on objects of different family

java - 工厂设计模式的实现

java - 处理大量 JMS 消息类型

javascript - XmlHttpRequest 状态 0 而不是 IE 10 中的 401

javascript - css替换段落标签中的字符

javascript - WIA.Vector 通过 Enumerator 返回一些不是数字的东西

java - 具有 getter/setter 的构建器模式