JavaScript中替代多个if else语句的方法是什么?

3

我有一个包含8个选项的下拉列表输入。根据用户选择的选项,我想将他们的输入值更改为不同的字符串值。为了实现这一点,我正在使用大量的if else语句,这使得代码看起来非常臃肿。如果可能的话,我想要简化它。以下是我的代码:

if (inputFive == "Corporation"){
    inputFive = "534"
} else if (inputFive == "LLC"){
    inputFive = "535"
} else if(inputFive == "LLP"){
    inputFive = "536"
} else if(inputFive == "Partnership"){
    inputFive = "537"
} else if(inputFive == "Sole Proprietorship"){
    inputFive = "538"
} else if(inputFive == "Limited Partnership"){
    inputFive = "539"
} else {
    inputFive = "540"
}

如您所见,这看起来有点老式。我想知道是否有更好/更简单的方法来实现这个功能。只是希望尽可能地压缩这段代码。我相信可以通过分配键/值对象来创建字典,但我不知道如何正确地做到这一点...所有选项/提示将不胜感激!

5个回答

16
您可以将对象用作映射表:

function getCode(input) {
    var inputMap = {
      "Corporation": "534",
      "LLC": "535",
      "LLP": "536",
      "Partnership": "537",
      "Sole Proprietorship": "538",
      "Limited Partnership": "539"
    };

    var defaultCode = "540";
    
    return inputMap[input] || defaultCode;
}

console.log(getCode("LLP"));
console.log(getCode("Lorem Ipsum"));


5
您的直觉是正确的。您可以这样做:
var mapping = {
    "Corporation": "534",
    "LLC": "535",
    ...
    "default": "540"
}
inputFive = mapping[inputFive] || mapping["default"]

4

使用switch语句,当你想要检查单个变量是否与多个可能的值匹配时,这种方法更好:

switch (inputFive) {
  case "Corporation" :
    inputFive = "534";
    break;
  case "LLC":
    inputFive = "535";
    break;
  case "LLP":
    inputFive = "536";
    break;
  case "Partnership":
    inputFive = "537";
    break;
  case "Sole Proprietorship":
    inputFive = "538";
    break;
  case "Limited Partnership":
    inputFive = "539";
    break;
  default:
    inputFive = "540";
    break;
}


2
你可能需要一种数组。
businessTypes = [];
businessTypes["Corporation"] = 534;
businessTypes["LLC"] = 535;
businessTypes["LLP"] = 536;
businessTypes["Partnership"] = 537;
businessTypes["Sole Proprietorship"] = 538;
businessTypes["Limited Partnership"] = 539;

然后你可以使用类似以下方式引用它:
businessId = businessTypes[inputFive] ? businessTypes[inputFive] : 540;
console.log(businessId);

你可以将它分解为一个函数:

你可以将其拆分成一个函数:

function getBusinessId(type) {
  businessTypes = [];
  businessTypes["Corporation"] = 534;
  businessTypes["LLC"] = 535;
  businessTypes["LLP"] = 536;
  businessTypes["Partnership"] = 537;
  businessTypes["Sole Proprietorship"] = 538;
  businessTypes["Limited Partnership"] = 539;
  return businessTypes[type] ? businessTypes[type] : 540;
}

var businessId = getBusinessId("LLC");
console.log(businessId); // 535


2
   // just another way but not faster than others at all
   // so then order is important 
   var inputMap = [
          "Corporation","LLC","LLP",
          "Partnership","Sole Proprietorship",
          "Limited Partnership"
        ];
    var res = inputMap.indexOf(input);
    res = res > -1 ? 534 + res : 540;

1
switch-case是最快的,但字典(哈希)也能提供可接受的性能,并具有动态用例的能力。而这个只是为了好玩。 - nullqube

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接