【问题标题】:NodeJS : Refactoring a long switch statementNodeJS:重构一个长的 switch 语句
【发布时间】:2017-12-26 13:26:24
【问题描述】:

我有一个很长的 switch 语句,我需要用更多的实践语句替换它,请帮助:

switch (global.testSuite) {
    case "cleanCache":
      testSenarios.cleanCache();
      break;
    case "setting":
      testSenarios.setting();
      break;
    case "installExtensions":
      testSenarios.installExtensions();
      break;
    case "addIndividualContact":
      testSenarios.addIndividualContact();
      break;
    case "addContact":
      testSenarios.addContact();
      break;
    case "add":
      testSenarios.add();
      break;
}

【问题讨论】:

  • testSenarios[global.testSuite]()

标签: javascript node.js switch-statement


【解决方案1】:

如果您在testSenarios 中只有有效的属性,您可以进行检查并将带括号的函数调用为property accessor

if (global.testSuite in testSenarios) {
     testSenarios[global.testSuite]();
}

或者,如果您有更多属性而不是函数,则可以改为检查 function

if (typeof testSenarios[global.testSuite] === 'function') {
     testSenarios[global.testSuite]();
}

【讨论】:

    【解决方案2】:

    Switch case 可以很容易地用带有键值对的 Object 替换。

    //Define a object 
    const testSuite = {
        cleanCache : testSenarios.cleanCache,
        setting : testSenarios.setting
        ......
        ....
    }
    
    //Then Replace the switch-case block with a single call
    testSuite[global.testSuite]()
    

    您甚至可以添加一个“默认”键来处理默认情况。

    【讨论】:

    • 您在设置对象时调用了每个函数,而不是在替换行中调用该函数。
    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多