Modo conciso per confrontare con più valori

Considera quanto segue:

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

C’è un modo per rendere questo più breve?

C’è qualcosa in Javascript come if (a=='bbb'||'ccc') ?

Inoltre, può aiutare jQuery qui?

Con un’espressione regolare:

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

O il contrario:

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

[Aggiornamento] Ancora più corto 😉

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

Potresti usare questo …

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

Se sei bloccato con il supporto del browser più vecchio …

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

Hai anche taggato jQuery, quindi se hai bisogno di supportare i browser più vecchi senza Array.prototype.indexOf() , potresti usare $.inArray() .

Puoi mettere le opzioni in array e usare jQuery $.inArray() o javascrpt indexOf indexOf() per cercare array

Javascript puro

Dimostrazione dal vivo

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

Con jQuery

Dimostrazione dal vivo

 var a = 'jesus'; arr = ['something', 'nothing', 'anything', 'everything']; if($.inArray(a, arr) != -1) // With jQuery alert("condition met"); else alert("condition not met"); 

Prova questo:

Se vuoi controllare le parole diverse da Gesù , prova a seguire,

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

se vuoi controllare determinate parole, prova a seguire,

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

Con ES7 è ansible utilizzare Array.prototype.includes e notazioni ancora più brevi di indexOf, che è già implementato in tutti i browser moderni.

Ecco l’esempio di utilizzo:

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

E il polyfill di Mozilla.

Può essere utilizzato switch anziché se:

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

Usando un object letterale:

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

Direi che questa è l’espressione cross-browser più concisa per uso generale (beh, purché l’objective sia confrontare le stringhe). È anche molto flessibile in quanto puoi facilmente aggiungere o rimuovere proprietà:

 all.mything=1; delete all.nothing; 

Penso che non ci sia un metodo semplice per farlo. Ma puoi scrivere una funzione in_array e puoi usarla ovunque ti serva

 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?'); }