Объявление переменной вне регистра в переключателе - в сухий код

Возьмем этот пример:

let name;

switch (name) {

  case "John":
    personsName = "little John";
  break;

  case "Bob":
    personsName = "Bob almighty";
  break;

}

Можно ли взять personName = из каждого кейса, положить как-нибудь поверх и оставить только аллокацию?

Так хотелось бы:

case "Bob":
  "Bob almighty";
break;

В противном случае с 50 случаями мне пришлось бы повторить текст personName = 50 раз. Если это невозможно, то почему?

Просто вообще не используйте инструкцию switch.

Bergi 11.04.2018 12:20
0
1
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создать картуname по сравнению с personName

var map = {
  "John" :  "little John",
  "Bob" : "Bob almighty"
}

Теперь получите свое имя как

var personName = map[name];

Нет необходимости использовать switch case.

Спасибо. Что, если бы вместо строк у меня были объекты? Такие как case "Bob": personName = bobObject; break;

lovemyjob 11.04.2018 12:29

Значение на карте также может быть object, но фактическое решение может зависеть от вашего варианта использования. map достаточно хорош, если требуется только поиск по имени.

gurvinder372 11.04.2018 12:32

+1, вы поняли. Но для полноты картины, поскольку он спросил, почему он не может этого сделать, я бы сказал следующее. @lovemyjob Тот факт, что вы не можете просто записать "string" в случай коммутатора, является причиной того, что вы просто заставляете его генерировать синтаксическую ошибку, поскольку вы ничего не делаете, а простая строка ничего не значит для js. Лучшее, что вы можете сделать, - это написать функцию, которая принимает имя в качестве параметра и в которой case each switch возвращает строку (которая в таком случае будет возвращаемым значением функции). Затем просто используйте функцию для повышения ценности переменной, но я все же рекомендую путь @ gurvinder372.

riot 11.04.2018 12:33

Спасибо, парни. Спасибо @riot за объяснение. Правильно ли я думаю, что этот пример с объектом будет работать? var map = { "Bob" : bobObject }; var personName = map.bobObject;?

lovemyjob 11.04.2018 12:38

Это не сработает, поскольку, если вы хотите получить значение внутри карты, вы должны указать его с помощью ключа, поэтому правильным подходом будет var personName = map.Bob.

riot 11.04.2018 12:39

@lovemyjob riot правильно, вам нужно применить ключ к карте, чтобы получить значение, а не наоборот.

gurvinder372 11.04.2018 12:40

Другие вопросы по теме