Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.10.2018, 15:07
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сделать короче проверку переменной с условием ИЛИ
Можно ли сделать как то короче такую запись, где одна и та же переменная через оператор ИЛИ || проверяется на значение?

Вот пример кода:
let test = this.dataset.test;

if (test == 'a' || test == 'b' || test == 'c' || test == 'd' || test == 'e' || test == 'f') {
    // .....
}


Или короче нельзя записать? А то у меня очень длинная портянка получается.
Ответить с цитированием
  #2 (permalink)  
Старый 14.10.2018, 15:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

HEX значение a равно 61, а f равно 66. Если взять значение младшего разряда и проверить диапазон от 1 до 6, значит условие выполнимо.
Второй способ сократить запись (не означает, что это лучше будет), это переменная test есть массив, в котором проверяется диапазон.
Ответить с цитированием
  #3 (permalink)  
Старый 14.10.2018, 15:48
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

const arr = ['a', 'b', 'c', 'd', 'e', 'f'];
let test = this.dataset.test;
if (arr.includes(test)) {
  // .....
}
Ответить с цитированием
  #4 (permalink)  
Старый 14.10.2018, 15:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

destus,
ой да, наоборот написал, диапазон есть массив. )
Ответить с цитированием
  #5 (permalink)  
Старый 14.10.2018, 16:02
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

var charCode = this.dataset.test.charCodeAt(0);
if(charCode>96 && charCode < 103){

}
Ответить с цитированием
  #6 (permalink)  
Старый 14.10.2018, 17:02
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от destus Посмотреть сообщение
const arr = ['a', 'b', 'c', 'd', 'e', 'f'];
let test = this.dataset.test;
if (arr.includes(test)) {
  // .....
}
Спасибо! То что я хотел. Работает правильно.

Сообщение от laimas Посмотреть сообщение
Второй способ сократить запись (не означает, что это лучше будет), это массив, в котором проверяется диапазон.
Мне удобно так, как в решении выше. А чем этот вариант хуже? Замедляет или нагрузку создаёт?
Я готов использовать изначальный вариант если это лучше. Просто я впервые столкнулся с методом includes и не знаю всей поднаготной. Но решение мне понравилось.

Решение с интервалом символов мне в данном случае не подходит, я просто для примера обозначил строковые значения. На самом деле у меня там много символов, а не по одной букве.
Ответить с цитированием
  #7 (permalink)  
Старый 14.10.2018, 17:13
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от MC-XOBAHCK
Решение с интервалом символов мне в данном случае не подходит
Вы именно диапазон и проверяете, в любом из представленного.

Сообщение от MC-XOBAHCK
А чем этот вариант хуже? Замедляет или нагрузку создаёт?
Ну к примеру проверка по массиву, это ведь надо получить его, затем сдвигать указатель, получать значение по указателю, которое только затем можно сравнить. А ИЛИ, это просто перечисление значений. Что у вас за портянка, но если действительно очень большая и оптимизация вопрос критичный, то ...
Ответить с цитированием
  #8 (permalink)  
Старый 14.10.2018, 17:35
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

laimas, я понял. Спасибо за объяснение.
Портянка сейчас на 12 значений, но со временем будет добавляться. Возможно до 20 значений вырастит.
Значения в таком стиле: ['rectNo2Deg', 'rectNo2Deg2', ..............]

Выделение значений в отдельный массив - это чисто для удобства (чтоб не путаться) и читаемости кода.
Как посоветуете, оставить ИЛИ или можно в данном случае массив с с методом includes ?
Ответить с цитированием
  #9 (permalink)  
Старый 14.10.2018, 17:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от MC-XOBAHCK
Как посоветуете, оставить ИЛИ или можно в данном случае массив с с методом includes ?
Если не критично, то копеечный выигрыш ничего не даст. Вам виднее, что применить, код то ваш, тестируйте, выбирайте.
Ответить с цитированием
  #10 (permalink)  
Старый 14.10.2018, 18:03
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от MC-XOBAHCK
Просто я впервые столкнулся с методом includes и не знаю всей поднаготной
поддержка не полноценная пока что, но можно заменить например
if(arr.indexOf(test) !== -1) {
}
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать, чтобы span или div исчезали и появлялись плавно? Бобр Общие вопросы Javascript 30 15.02.2011 19:44
Как отлаживать события? Или как сделать трассировку вызовов функций? gennad Events/DOM/Window 1 18.08.2010 13:21
Вопрос тупой, как сделать обычное по со списком или combobox иначе ? dennnyk Элементы интерфейса 1 07.07.2010 06:59
30(1|2) редирект от сервера. Или как лучше сделать редирект при верной отсылке форма. pizzZ AJAX и COMET 2 18.02.2010 09:06
Переменная от переменной или как к имени переменной конкатенировать значение другой Aderba jQuery 5 12.11.2008 15:25