14.10.2018, 15:07
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
Сделать короче проверку переменной с условием ИЛИ
Можно ли сделать как то короче такую запись, где одна и та же переменная через оператор ИЛИ || проверяется на значение?
Вот пример кода:
let test = this.dataset.test;
if (test == 'a' || test == 'b' || test == 'c' || test == 'd' || test == 'e' || test == 'f') {
// .....
}
Или короче нельзя записать? А то у меня очень длинная портянка получается.
|
|
14.10.2018, 15:44
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
HEX значение a равно 61, а f равно 66. Если взять значение младшего разряда и проверить диапазон от 1 до 6, значит условие выполнимо.
Второй способ сократить запись (не означает, что это лучше будет), это переменная test есть массив, в котором проверяется диапазон.
|
|
14.10.2018, 15:48
|
|
Профессор
|
|
Регистрация: 18.05.2011
Сообщений: 1,207
|
|
const arr = ['a', 'b', 'c', 'd', 'e', 'f'];
let test = this.dataset.test;
if (arr.includes(test)) {
// .....
}
|
|
14.10.2018, 15:53
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
destus,
ой да, наоборот написал, диапазон есть массив. )
|
|
14.10.2018, 16:02
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
var charCode = this.dataset.test.charCodeAt(0);
if(charCode>96 && charCode < 103){
}
|
|
14.10.2018, 17:02
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
Сообщение от destus
|
const arr = ['a', 'b', 'c', 'd', 'e', 'f'];
let test = this.dataset.test;
if (arr.includes(test)) {
// .....
}
|
Спасибо! То что я хотел. Работает правильно.
Сообщение от laimas
|
Второй способ сократить запись (не означает, что это лучше будет), это массив, в котором проверяется диапазон.
|
Мне удобно так, как в решении выше. А чем этот вариант хуже? Замедляет или нагрузку создаёт?
Я готов использовать изначальный вариант если это лучше. Просто я впервые столкнулся с методом includes и не знаю всей поднаготной. Но решение мне понравилось.
Решение с интервалом символов мне в данном случае не подходит, я просто для примера обозначил строковые значения. На самом деле у меня там много символов, а не по одной букве.
|
|
14.10.2018, 17:13
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от MC-XOBAHCK
|
Решение с интервалом символов мне в данном случае не подходит
|
Вы именно диапазон и проверяете, в любом из представленного.
Сообщение от MC-XOBAHCK
|
А чем этот вариант хуже? Замедляет или нагрузку создаёт?
|
Ну к примеру проверка по массиву, это ведь надо получить его, затем сдвигать указатель, получать значение по указателю, которое только затем можно сравнить. А ИЛИ, это просто перечисление значений. Что у вас за портянка, но если действительно очень большая и оптимизация вопрос критичный, то ...
|
|
14.10.2018, 17:35
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
laimas, я понял. Спасибо за объяснение.
Портянка сейчас на 12 значений, но со временем будет добавляться. Возможно до 20 значений вырастит.
Значения в таком стиле: ['rectNo2Deg', 'rectNo2Deg2', ..............]
Выделение значений в отдельный массив - это чисто для удобства (чтоб не путаться) и читаемости кода.
Как посоветуете, оставить ИЛИ или можно в данном случае массив с с методом includes ?
|
|
14.10.2018, 17:38
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от MC-XOBAHCK
|
Как посоветуете, оставить ИЛИ или можно в данном случае массив с с методом includes ?
|
Если не критично, то копеечный выигрыш ничего не даст. Вам виднее, что применить, код то ваш, тестируйте, выбирайте.
|
|
14.10.2018, 18:03
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сообщение от MC-XOBAHCK
|
Просто я впервые столкнулся с методом includes и не знаю всей поднаготной
|
поддержка не полноценная пока что, но можно заменить например
if(arr.indexOf(test) !== -1) {
}
|
|
|
|