Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как удачнее сравнить переменную с двумя и более строками? (https://javascript.ru/forum/misc/76188-kak-udachnee-sravnit-peremennuyu-s-dvumya-i-bolee-strokami.html)

Svorg 12.12.2018 11:15

Как удачнее сравнить переменную с двумя и более строками?
 
Допустим, есть переменная с заранее неизвестной строкой.
Надо сделать что-то вроде такого:
let S = getS();
if (S === 'Test' || S === 'Dev' || S === 'Debug' || S === 'lacrymachristi' || ... ) {
  ...
};
Собственно вопрос, можно ли это как-то красиво/удобно/читабельно облагородить (и чтоб производительность не портило)?
Спасибо!

Nexus 12.12.2018 11:25

Не уверен, что по производительности это будет более эффективно, однако разницу вы вряд ли заметите, а + к читабельности будет.
const string=getString();
const allowedValues=['Test','Dev','etc.'];
if(allowedValues.indexOf(string)>=0)
    //do something

рони 12.12.2018 11:30

Svorg,
или так
const obj = {'Test' : true,'Dev' : true, 'etc.' : true};
if(obj[S])

Alexandroppolus 12.12.2018 11:36

Цитата:

Сообщение от рони (Сообщение 500342)
Svorg,
или так
const obj = {'Test' : true,'Dev' : true, 'etc.' : true};
if(obj[S])

у такого варианта подводный камень - Object.prototype с ещё несколькими значениями. Лучше obj.hasOwnProperty(S);

ну а если строк мало, то да, массив и indexOf, нагляднее и лаконичнее

Svorg 12.12.2018 11:53

Большое спасибо!

SuperZen 12.12.2018 11:55

console.log(['Test', 'Dev', 'Debug', 'lacrymachristi'].some(v => v === 'Test'))

Svorg 12.12.2018 14:00

гм... Думаю будет интересно сравнить это по производительности... :3

j0hnik 12.12.2018 15:27

Svorg,
по производительности, обращение к свойству объекта

Alexandroppolus 12.12.2018 15:46

Цитата:

Сообщение от j0hnik (Сообщение 500390)
Svorg,
по производительности, обращение к свойству объекта

если строк много, то однозначно

и кстати Map может оказаться даже быстрее

Vlasenko Fedor 12.12.2018 15:50

в примере используются строки
значит можно и так
/^(TestDev|Debug|lacrymachristi)$/.test(value)


Часовой пояс GMT +3, время: 08:15.