Dr_Elvis
@Dr_Elvis
В гугле забанен

Можно ли сделать switch-case из списка?

Допустим есть список
let one = ['a', 'b', 'c']
let two = ['1', '2', '3']

есть ли возможность написать чтото подобное?
switch(inp){
    case in one:
        // do one
        break;
    case in two:
        // do two
        break;
}

Или нужно пользоваться только if-ами?
  • Вопрос задан
  • 195 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
switch (true) {
  case one.includes(inp):
    ...
    break;

  case two.includes(inp):
    ...
    break;
}

Но вообще, в подобной хрени необходимости нет. Собираете в объекты пары массив + завернутый в функцию код из соответствующего массиву case'а, полученные объекты кладёте в массив:

const arr = [
  {
    values: [ ... ],
    action: () => { ... },
  },
  {
    values: [ ... ],
    action: () => { ... },
  },
];

И тогда всё сведётся к поиску элемента и вызову метода:

arr.find(n => n.values.includes(inp))?.action();
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Interface
Можно примерно так
let one = ['a', 'b', 'c'];
let two = ['1', '2', '3'];

const inp = '2';

const foundList = [one, two].find(list => list.includes(inp));

switch (foundList) {
    case one: console.log('one'); break;
    case two: console.log('two'); break;
}


, но имхо лучше if'ами
Ответ написан
Комментировать
@Karpion
Данное действие хорошо в схеме
if (... one) then
	{...}
else if (...two) then
	{...}
indif


Остался вопрос о том, как определить принадлежность inp к списку. Это хорошо делается хэш-массивами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы