在 switch 语句中使用具有相同键和值的对象是否是错误/无意义的代码?

问题描述 投票:0回答:2

所以我遇到了一些旧代码,类似于:

const valStore = {
  val1: "val1"
  val2: "val2"
  val3: "val3"
}

然后就这样称呼它:

switch (val) {
  case "val4":
    function()
  break;
  case "val5":
    coolFunction()
  break;
  case valStore[val]:
    otherFunction(val)
...

我不喜欢有一个完整的对象具有相同的键和值,这看起来很混乱,因为它在真实版本中只有 5 个值,尽管失败的 switch 语句看起来并没有好多少:

switch (val) {
  case "val4":
    function()
    break;
  case "val5":
    coolFunction()
    break;
  case val1:
  case val2:
  case val3:
    otherFunction(val)
...

我考虑过使用集合和 else if,我不确定是否需要替换或者我是否在浪费时间。这让我开始思考。

javascript object switch-statement
2个回答
0
投票

除了

switch
之外,您还可以将函数引用放入对象中并直接调用它们:

const valStore = {
  val1: otherFunction,
  val2: otherFunction,
  val3: otherFunction,
  val4: function() { /* your logic here */ },
  val5: coolFunction
}

valStore[val]();

我还建议找到一种方法来删除

valX: otherFunction
重复,但如果不了解逻辑的上下文和结构,就很难提出可行的替代方案。


0
投票

最好使用带有函数的字典

const val = "val1"; // set the value here, dynamically or hard coded
// store your functions into an easy to access dictionary.
const valStore = {
    "val1": otherFunction1,
    "val2": otherFunction2,
    "val3": otherFunction3,
    "val4": () => { /* your code here */ },
    "val5": otherFunction5,
}

// call it like this, this also checks if the val belongs to a valid function

let output = valStore[val] ? valStore[val] : "No function ran";
© www.soinside.com 2019 - 2024. All rights reserved.