Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сделать короче проверку переменной с условием ИЛИ (https://javascript.ru/forum/misc/75486-sdelat-koroche-proverku-peremennojj-s-usloviem-ili.html)

MC-XOBAHCK 14.10.2018 15:07

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

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

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


Или короче нельзя записать? А то у меня очень длинная портянка получается.

laimas 14.10.2018 15:44

HEX значение a равно 61, а f равно 66. Если взять значение младшего разряда и проверить диапазон от 1 до 6, значит условие выполнимо.
Второй способ сократить запись (не означает, что это лучше будет), это переменная test есть массив, в котором проверяется диапазон.

destus 14.10.2018 15:48

const arr = ['a', 'b', 'c', 'd', 'e', 'f'];
let test = this.dataset.test;
if (arr.includes(test)) {
  // .....
}

laimas 14.10.2018 15:53

destus,
ой да, наоборот написал, диапазон есть массив. )

j0hnik 14.10.2018 16:02

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

}

MC-XOBAHCK 14.10.2018 17:02

Цитата:

Сообщение от destus (Сообщение 496267)
const arr = ['a', 'b', 'c', 'd', 'e', 'f'];
let test = this.dataset.test;
if (arr.includes(test)) {
  // .....
}

Спасибо! То что я хотел. Работает правильно.

Цитата:

Сообщение от laimas (Сообщение 496265)
Второй способ сократить запись (не означает, что это лучше будет), это массив, в котором проверяется диапазон.

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

Решение с интервалом символов мне в данном случае не подходит, я просто для примера обозначил строковые значения. На самом деле у меня там много символов, а не по одной букве.

laimas 14.10.2018 17:13

Цитата:

Сообщение от MC-XOBAHCK
Решение с интервалом символов мне в данном случае не подходит

Вы именно диапазон и проверяете, в любом из представленного.

Цитата:

Сообщение от MC-XOBAHCK
А чем этот вариант хуже? Замедляет или нагрузку создаёт?

Ну к примеру проверка по массиву, это ведь надо получить его, затем сдвигать указатель, получать значение по указателю, которое только затем можно сравнить. А ИЛИ, это просто перечисление значений. Что у вас за портянка, но если действительно очень большая и оптимизация вопрос критичный, то ...

MC-XOBAHCK 14.10.2018 17:35

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

Выделение значений в отдельный массив - это чисто для удобства (чтоб не путаться) и читаемости кода.
Как посоветуете, оставить ИЛИ или можно в данном случае массив с с методом includes ?

laimas 14.10.2018 17:38

Цитата:

Сообщение от MC-XOBAHCK
Как посоветуете, оставить ИЛИ или можно в данном случае массив с с методом includes ?

Если не критично, то копеечный выигрыш ничего не даст. Вам виднее, что применить, код то ваш, тестируйте, выбирайте.

j0hnik 14.10.2018 18:03

Цитата:

Сообщение от MC-XOBAHCK
Просто я впервые столкнулся с методом includes и не знаю всей поднаготной

поддержка не полноценная пока что, но можно заменить например
if(arr.indexOf(test) !== -1) {
}


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