Заменить оператор switch несколькими назначениями на литерал объекта - PullRequest
1 голос
/ 13 января 2020

У меня есть оператор switch, который я хотел бы заменить на литерал объекта, но поскольку для каждого случая выполняется несколько присваиваний, я не знаю, как это сделать.

switch (roll1) {
    case 21:
        rain = 1.25;
        break;
    case 22:
        rain = 1.5;
        solid = "light";
        break;
    case 23:
        rain = 1.75;
        solid = "light";
        break;
    case 24:
        rain = 2;
        solid = "light";
        break;
    case 25:
        rain = 2.25;
        solid = "medium";
        break;
    case 26:
        rain = 2.5;
        solid = "medium";
        hook = 1;
        break;
    case 27:
        rain = 2.75;
        solid = "medium";
        hook = 5;
        break;
    case 28:
        rain = 3;
        solid = "heavy";
        hook = 10;
        break;
    case 29:
        rain = 3.25;
        solid = "heavy";
        hook = 15;
        break;
    case 30:
        rain = 3.5;
        solid = "heavy";
        hook = 20;
}
return [rain,solid,hook];

Примечание: solid & hook задаются значения по умолчанию перед оператором switch. Я смотрел на этот пример:

const dogSwitch = (breed) => ({
  "border": "Border Collies are good boys and girls.",
  "border2": "Border Collies are good boys and girls.",
  "pitbull": "Pit Bulls are good boys and girls.",
  "german": "German Shepherds are good boys and girls."
})[breed]
console.log(dogSwitch("border2"))

Но каждой строке литерала объекта присваивается только одно значение, а не несколько. Пожалуйста, сообщите.

Ответы [ 2 ]

1 голос
/ 13 января 2020

Вы можете переместить его в Объекты для обработки.

const getRollProps = (roll1) => {
  const caseList = {
    "21": {
      "rain": 1.25
    },
    "22": {
      "rain": 1.5,
      "solid": "light"
    },
    "23": {
      "rain": 1.75,
      "solid": "light"
    },
    "24": {
      "rain": 2,
      "solid": "light"
    },
    "25": {
      "rain": 2.25,
      "solid": "medium"
    },
    "26": {
      "rain": 2.5,
      "solid": "medium",
      "hook": 1
    },
    "27": {
      "rain": 2.75,
      "solid": "medium",
      "hook": 5
    },
    "28": {
      "rain": 3,
      "solid": "heavy",
      "hook": 10
    },
    "29": {
      "rain": 3.25,
      "solid": "heavy",
      "hook": 15
    },
    "30": {
      "rain": 3.5,
      "solid": "heavy",
      "hook": 20
    }
  };

  const {rain, solid, hook} = (caseList[roll1] || {});
  return [rain, solid, hook];
}

getRollProps(22);
1 голос
/ 13 января 2020

Вы можете определить объект, как показано ниже, а затем использовать деструктуризацию объекта, чтобы получить значения для указанных переменных:

let doc = { 23: { rain: 1.25 }, 22: { rain: 1.5, solid: "light" }, 29: { rain: 3.25, solid: "heavy", hook: 20 } };

let {rain, solid, hook} = doc[29];

console.log(solid);
console.log(rain);
console.log(hook);
...