JavaScript условно - как проверить, соответствует ли переменная любому из списка значений? - PullRequest
3 голосов
/ 15 ноября 2011

Есть ли в JavaScript удобный способ проверить, соответствует ли переменная одному из многих значений?

Это мой код,

function Start()
{
    if(number==(0||3||6||8||9||11||13||14||15||18||19||22||23||25||27||28||31||34||43||46||47||49||54||58||59||62||63||68||71||74||75))
    {
        FirstFunction();
    }
    if(number==(1||4||5||7||12||16||17||20||21||26||29||32||33||42||45||48||50||51||53||55||56||57||60||61||64||65||67||69||70||73||76))
    {
        SecondFunction();
    }
}

как видите, я пытался использовать оператор "или", чтобы проверить, равно ли число ЛЮБОМУ из перечисленных. это, к сожалению, не сработало. Я знаю, я могу просто код:

if(number==0||number==3||number==6....)

Думаю, этому должна быть альтернатива?

Заранее спасибо.

Ответы [ 3 ]

10 голосов
/ 15 ноября 2011

Вы должны вставить все свои элементы в массив и использовать arr.indexOf (element)

Возвращает -1, если элемент не существует, который вы можете использовать для , если логика

Это лучше, чем иметь много операторов if

var x = new Array(1,7,15,18);

if ( x.indexOf(31) != -1 )
{
  // Add your logic here
}
3 голосов
/ 15 ноября 2011

Вы можете написать что-то вроде этого, что выглядит немного лучше:

Эта функция-прототип Array позволит вам проверить, существует ли элемент в массиве JS:

Array.prototype.exists = function (x) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == x) return true;
    }
    return false;
}

Тогда:

function Start()
{
    var values1 =[0,3,6,8,9,11,13,14,15,18,19,22,23,25,27,28,31,34,43,46,47,49,54,58,59,62,63,68,71,74,75];
    var values2 = [1,4,5,7,12,16,17,20,21,26,29,32,33,42,45,48,50,51,53,55,56,57,60,61,64,65,67,69,70,73,76];

    if( values1.exists(number) )
    {
        FirstFunction();
    } else if ( values2.exists(number) )
    {
        SecondFunction();
    }
}
0 голосов
/ 15 ноября 2011

Упомянутые выше методы работы с массивами хороши, например, [0, 3, 6, 8].indexOf(number) != -1, но имейте в виду, что не все браузеры поддерживают .indexOf() для массивов (вспомним более старый IE). Если вы посмотрите на страницу MDN на .indexOf(), то увидите, что они предоставили реализацию .indexOf(), которую вы можете добавить к Array.prototype, если она еще не существует.

Но вот немассивный метод , который будет работать в старых браузерах, по крайней мере, начиная с IE6, без необходимости добавления собственных функций или изменения прототипа любых встроенных объектов:

if (/^(0|3|6|8|9|11)$/.test(number)) {
   // matched, so do something
}

Метод регулярного выражения .text() ожидает строку, но если вы зададите ей число, он справится.

Вероятно, я бы по-прежнему рекомендовал метод массива, но это не помешает иметь другую опцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...