Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.12.2018, 11:15
Аспирант
Отправить личное сообщение для Svorg Посмотреть профиль Найти все сообщения от Svorg
 
Регистрация: 16.11.2018
Сообщений: 38

Как удачнее сравнить переменную с двумя и более строками?
Допустим, есть переменная с заранее неизвестной строкой.
Надо сделать что-то вроде такого:
let S = getS();
if (S === 'Test' || S === 'Dev' || S === 'Debug' || S === 'lacrymachristi' || ... ) {
  ...
};
Собственно вопрос, можно ли это как-то красиво/удобно/читабельно облагородить (и чтоб производительность не портило)?
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 12.12.2018, 11:25
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,719

Не уверен, что по производительности это будет более эффективно, однако разницу вы вряд ли заметите, а + к читабельности будет.
const string=getString();
const allowedValues=['Test','Dev','etc.'];
if(allowedValues.indexOf(string)>=0)
    //do something
Ответить с цитированием
  #3 (permalink)  
Старый 12.12.2018, 11:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Svorg,
или так
const obj = {'Test' : true,'Dev' : true, 'etc.' : true};
if(obj[S])
Ответить с цитированием
  #4 (permalink)  
Старый 12.12.2018, 11:36
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от рони Посмотреть сообщение
Svorg,
или так
const obj = {'Test' : true,'Dev' : true, 'etc.' : true};
if(obj[S])
у такого варианта подводный камень - Object.prototype с ещё несколькими значениями. Лучше obj.hasOwnProperty(S);

ну а если строк мало, то да, массив и indexOf, нагляднее и лаконичнее
Ответить с цитированием
  #5 (permalink)  
Старый 12.12.2018, 11:53
Аспирант
Отправить личное сообщение для Svorg Посмотреть профиль Найти все сообщения от Svorg
 
Регистрация: 16.11.2018
Сообщений: 38

Большое спасибо!
Ответить с цитированием
  #6 (permalink)  
Старый 12.12.2018, 11:55
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

console.log(['Test', 'Dev', 'Debug', 'lacrymachristi'].some(v => v === 'Test'))
Ответить с цитированием
  #7 (permalink)  
Старый 12.12.2018, 14:00
Аспирант
Отправить личное сообщение для Svorg Посмотреть профиль Найти все сообщения от Svorg
 
Регистрация: 16.11.2018
Сообщений: 38

гм... Думаю будет интересно сравнить это по производительности... :3
Ответить с цитированием
  #8 (permalink)  
Старый 12.12.2018, 15:27
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Svorg,
по производительности, обращение к свойству объекта
Ответить с цитированием
  #9 (permalink)  
Старый 12.12.2018, 15:46
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от j0hnik Посмотреть сообщение
Svorg,
по производительности, обращение к свойству объекта
если строк много, то однозначно

и кстати Map может оказаться даже быстрее
Ответить с цитированием
  #10 (permalink)  
Старый 12.12.2018, 15:50
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вытащить из Return в переменную для передачи в форму? Enterely Javascript под браузер 9 11.02.2015 17:10
Как в фильтр выборки по атрибуту занести переменную? tanto39 jQuery 9 29.06.2014 01:53
Подскажите как сравнить первые элементы многомерного массива? yloboda Элементы интерфейса 3 08.06.2014 15:00
как лучше сравнить переменную со значениями из массива ? mitiya Общие вопросы Javascript 2 19.09.2012 22:40
Как обозначить переменную выбранную в FileChooser? woo_hoo Общие вопросы Javascript 4 03.07.2008 12:58