Краткий способ сравнения с несколькими значениями

Рассмотрим следующее:

var a = 'jesus';

if(a == 'something' || a == 'nothing' || a=='anything' || a=='everything'){
   alert('Who cares?');
}

Есть ли способ сделать это короче?

Есть ли что-нибудь в Javascript, например if (a=='bbb'||'ccc')?

Кроме того, может ли помочь jQuery?

Ответы

Ответ 1

С регулярным выражением:

if (/^(something|nothing|anything|everything)$/.exec('jesus')) alert('Who cares?');​

Или наоборот:

/^(something|nothing|anything|everything)$/.exec('jesus')||alert('Who cares?');​

[Обновить] Еще короче; -)

if (/^(some|no|any|every)thing$/.exec('jesus')) alert('Who cares?');​

Ответ 2

Вы могли бы использовать это...

if (["something", "nothing", "anything", "everything"].includes(a)) {
   alert('Who cares?');
}

Если вы застряли с поддержкой старых браузеров...

if (["something", "nothing", "anything", "everything"].indexOf(a) > -1) {
   alert('Who cares?');
}

Вы также пометили его как jQuery, поэтому, если вам нужно поддерживать старые браузеры без Array.prototype.indexOf(), вы можете использовать $.inArray().

Ответ 3

Вы можете поместить параметры в массив и использовать jQuery $.inArray() или javascrpt indexOf() для поиска массива

Чистый javascript

Live Demo

var a = 'anything';
arr = ['something', 'nothing', 'anything', 'everything'];
if(arr.indexOf(a) != -1)
    alert("condition met");    
else
    alert("condition not met");    

С jQuery

Live Demo

var a = 'jesus';
arr = ['something', 'nothing', 'anything', 'everything'];

if($.inArray(a, arr) != -1) // With jQuery
    alert("condition met");    
else
    alert("condition not met");    

Ответ 4

Попробуйте следующее:

Если вы хотите проверить слова, отличные от Jesus, попробуйте следовать,

if(a != "jesus"){
   alert('Who cares?');
}

если вы хотите проверить определенные слова, попробуйте следовать,

var check_arrays = ['something','nothing', 'anything', 'everything'];
if(checkThis(a)){
   alert('Who cares?');
}

function checkThis(a)
{
   for(i=0;i<check_arrays.length;i++)
   {
      if(check_arrays[i] == a)
      return true;
   }
   return false;
}

Ответ 5

С ES7 вы можете использовать Array.prototype.includes и даже более короткую запись, чем indexOf, которая уже реализована в каждом современном браузере.

Вот пример использования:

if (['hero', 'anything', 'everything'].includes(me)) {
    alert('Who cares?');
}

И полифилл от Мозиллы.

Ответ 6

Может быть, использовать переключатель, а не если:

var a = 'jesus';
switch (a){
    case 'something':
    case 'nothing' :
    case 'anything':
    case 'everything':
   alert('Who cares?');
   break;
}

Ответ 7

Использование литерала объекта:

var all={something:1,nothing:1,anything:1,everything:1};
if (all.hasOwnProperty('jesus')) alert('Who cares?');​

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

all.mything=1;
delete all.nothing;

Ответ 8

Я думаю, что нет простого способа сделать это. Но вы можете написать функцию in_array, и вы можете использовать ее в любом месте

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

var v_array = [ 'something','nothing', 'anything', 'everything'];

var a = "jesus";

if(v_array.in_array(a)){
    alert('Who cares?');
}