Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как обойтись без ИЛИ? (https://javascript.ru/forum/events/52223-kak-obojjtis-bez-ili.html)

piraids 09.12.2014 11:04

Как обойтись без ИЛИ?
 
Есть условие на проверку значения:
var $val = 1;
if($val == '1' || $val == '7' || $val == '9'){
  console.log('выполняем действие');
}

Как обойтись без логического ИЛИ( || ) ?

Safort 09.12.2014 11:47

Есть вариант c использованием метода some(). Но он годится только если у тебя много возможных ИЛИ

var $val = 1;

    var m = ['1', '7', '9'];
    var res = m.some(function(el) {
      return $val == el;
    });

    if (res) {
      console.log('выполняем действия');
    }

ruslan_mart 09.12.2014 11:58

var $val = 1;
   
if($val in {1:0, 7:0, 9:0}) {
    alert(true);
}

Sweet 09.12.2014 12:19

var $val = 1;
switch ($val) {
    case 1:
    case 7:
    case 9:
        console.log('выполняем действие');
        break;
}

Яростный Меч 09.12.2014 13:21

if (/^[179]$/.test($val)) { ... }

danik.js 09.12.2014 17:46

По-моему самый простой:
(['1', '7', '9'].indexOf(val) >= 0)

nerv_ 09.12.2014 17:56

как и просили, без или :)
var $val = 1;
console.log('выполняем действие');

ruslan_mart 09.12.2014 18:06

danik.js, а зачем цифры в кавычки?

danik.js 09.12.2014 18:27

Цитата:

Сообщение от Ruslan_xDD
danik.js, а зачем цифры в кавычки?

Это не ко мне вопрос. Только нужно помнить, что для indexOf проводится строгая проверка - нужно привести все к одному типу.

bes 09.12.2014 19:02

Цитата:

Сообщение от piraids (Сообщение 345630)
Есть условие на проверку значения:
var $val = 1;
if($val == '1' || $val == '7' || $val == '9'){
  console.log('выполняем действие');
}

Как обойтись без логического ИЛИ( || ) ?

я думаю, что твоё решение самое адекватное :)

Deff 09.12.2014 19:25

var $val = 1,
tst = !!('179'.indexOf(''+$val)+1);
alert(tst)


var i=$val = 1;
var y = (9-i)*(7-i)*(1-i);
alert(!y)

melky 09.12.2014 22:03

Цитата:

Сообщение от nerv_ (Сообщение 345708)
как и просили, без или :)
var $val = 1;
console.log('выполняем действие');

Код:

npm install --global NervifyJS
Цитата:

Сообщение от danik.js (Сообщение 345705)
По-моему самый простой:
(['1', '7', '9'].indexOf(val) >= 0)

Цитата:

Сообщение от Ruslan_xDD (Сообщение 345636)
var $val = 1;
if($val in {1:0, 7:0, 9:0}) {
    alert(true);
}

lodash:
var $val = 1;
var values = _.invert([1, 7, 9]);
if($val in values) {
    console.log(true);
}

danik.js 09.12.2014 23:54

Deff,
var $val = 17,
tst = !!('179'.indexOf(''+$val)+1);
alert(tst)

danik.js 09.12.2014 23:58

Цитата:

Сообщение от Deff
!!('179'.indexOf(''+$val)+1)

Вот, сцуко во всех языках почти видал indexOf. Но вот такой вот извращенный способ (есть еще один, еще более уебанский) записи встречаю только в js.
Я так понимаю это потому, что js имеет низкий порог вхождения, поэтому туда прет толпа веб-говно-программистов-дегенератов и возникает такая вот херня.

Deff 10.12.2014 00:00

Гы - пример был для младших школьников - там считают от 0 до 9,
ты еще 179 задай
Вот для пятиклашек
var $val = 1,
tst = '1|7|9|'.indexOf(''+$val)+1;
alert(!!tst)

Deff 10.12.2014 00:17

Цитата:

Сообщение от danik.js (Сообщение 345783)
Вот, сцуко во всех языках почти видал indexOf. Но вот такой вот извращенный способ (есть еще один, еще более уебанский) записи встречаю только в js.
Я так понимаю это потому, что js имеет низкий порог вхождения, поэтому туда прет толпа веб-говно-программистов-дегенератов и возникает такая вот херня.

Тут у меня племянник окуенно проффи на форекс был, с кучей претензий к окружающим, действительно в списках был в первой десятке, ток пару раз лажанулся, начальнику не понравился,да и с клиентами был в речах непринуждён, дык сейчас, чтоб жена с ребёнком остались жить не на улице, пришлось помогать гасить ипотеку. Так шо кроме чсв и прохфессианализма нун еще иметь тактичность и уважение к окружающим ибо оступишьсо, а жисть она даёт не ток опыт но и ляпы, кто тебе руку протянет и из говна вытащит ? Кого ты еще здесь не обосрал ?

danik.js 10.12.2014 00:54

Deff, ну ты ведь не тупорылый клиент, так ведь? Ты вроде как и опыт имеешь, не новичок ведь (было бы простительно). Стало быть ты просто упертый говнокодер.
Ну и если меня тут забанят, я не окажусь на улице.

Deff 10.12.2014 02:27

danik.js,
Я Военный пенсионер, помимо говнокодерства пол-союза в моих разработках уже более пятнадцати лет, и замены им пока нет, а у тьву что есть? Кто тебя спрашивал, сосунка, - твое мнение о моём говнокоде ?
Имхо, к примеру, в этом топике, есть ли какая твоя идея отличная от иных предложенных? Чем ты хвалишься, красивым написанием кода ? Дегенерат имхо ты, поскольку не усвоил за столько лет даже норм приличия общения с юзерами!

danik.js 10.12.2014 02:56

Цитата:

Сообщение от Deff
Кто тебя спрашивал, сосунка, - твое мнение о моём говнокоде ?

Ну глупо же. Зачем ты тогда постишь код публично, если боишься критики?
Пости в личку автору в таком случае :)

Цитата:

Сообщение от Deff
есть ли какая твоя идея отличная от иных предложенных?

О, так ты даже не соизволил посмотреть просмотреть тему, прежде чем постить в нее?

Цитата:

Сообщение от Deff
о моём говнокоде ?

Ну хоть признал, это уже хорошо :)
Цитата:

Сообщение от Deff
1 var i=$val = 1;
2 var y = (9-i)*(7-i)*(1-i);
3 alert(!y)

А вот это - интересное решение! У меня мелькала мысль в этом направлении, но не хотелось думать )

danik.js 10.12.2014 03:07

Цитата:

Сообщение от danik.js
А вот это - интересное решение!

Впринципе, это преобразованный вид изначального решения:
i == 1 || i == 2 || i == 3
->
!( (i != 1) && (i != 2) && (i != 3) )
->
!( (1-i != 0) && (2-i != 0) && (3-i != 0) )
-> заменяем логические операции и значения арифметическими
!( (1-i) * (2-i) * (3-i) )

danik.js 10.12.2014 03:11

Цитата:

Сообщение от Deff
Дегенерат имхо ты, поскольку не усвоил за столько лет даже норм приличия общения с юзерами!

Ну логично же. Это ж не форум по нормам приличия.
Зато за все это время такого насмотрелся, что да, походу нервные клетки дегенерируют :)

ruslan_mart 10.12.2014 09:53

var $val = 1;

if(~'1|3|7|'.indexOf(''+$val)) {
    alert(true);
}


:D

var $val = 1;
~'1|3|7|'.indexOf(''+$val) && alert(true);

nerv_ 10.12.2014 10:30

Цитата:

Сообщение от melky
Код:

npm install --global NervifyJS

:D

devote 10.12.2014 10:45

danik.js, хватит уже хаить Deff'a, он наш человек.
Я посмотрю как ты в пенсионном возрасте будешь кодить потом.

Aetae 10.12.2014 11:39

Современный вариант:
alert( new Set([1, 7, 9]).has(1) )
:)

P.S. Бесит таки, что не удосужились придумать литералы для set\map. :(

Яростный Меч 10.12.2014 14:50

Цитата:

Сообщение от Aetae
не удосужились придумать литералы для set\map.

для map же есть литерал - стандартный json-объект, {...}
или ты про какой-то другой map?

Aetae 10.12.2014 15:06

Яростный Меч, про этот Map, про какой ещё. В отличие от объекта ключи в нём любые, а не только строки.

nerv_ 10.12.2014 17:44

Цитата:

Сообщение от Aetae
В отличие от объекта ключи в нём любые, а не только строки

медленный, поди)

Aetae 10.12.2014 17:51

nerv_, медленней простого объекта. Но гораздо быстрее поиска по массивам. Ну плюс генерация через жопу - сначала уродливый двухуровневый массив, а потом преобразование его в Map, что тоже отражается на времени.:(

В целом всё равно штука прикольная. Прикольней только WeakMap\Set.:)


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