2013-07-26 6 views
5

Ich bin neu in Javascript und immer noch mit den Nuancen der Sprache zu kommen.Bessere Methode zur Überprüfung einer Reihe von Bedingungen

Ich habe ein Stück Code, wo ich eine Reihe von Bedingungen für eine bestimmte Variable überprüfen muss.

if (a=="MAIN_DOMAINNAME" || a=="DOMAIN_SERIAL" || a=="DOMAIN_REFRESH" || a=="DOMAIN_RETRY" || a=="DOMAIN_EXPIRE" || a=="DOMAIN_NEGTTL" || a=="MAIN_NS") { 

Gibt es einen besseren Weg, diesen bedingten Scheck zu tun, wie etwa:

if a is one of ("DOMAIN_SERIAL", "MAIN_DOMAINNAME", "DOMAIN_REFRESH") {?

Antwort

13

einen relativ modernen Browser Unter der Annahme, können Sie Array.indexOf(spec)

if (["DOMAIN_SERIAL", "MAIN_DOMAINNAME", "DOMAIN_REFRESH"].indexOf(a) !== -1) 

Hinweis verwenden - Sie leicht für älteren Browser Shim (siehe the mdn link wie).

+5

8 upvotes innerhalb einer Minute für solch eine triviale Antwort O_o (und keine auf die Frage). –

+1

+1 für Shim .. und erklären den modernen Browser Punkt :) –

+1

Einfache und elegante Lösung .... :) –

2

Ein regex wäre kürzer und funktioniert überall:

if (/^(MAIN_DOMAINNAME|DOMAIN_SERIAL|DOMAIN_REFRESH|..)$/.test(a)) { 
    // do stuff 
} 

FIDDLE

+2

Dies ist nicht gleichwertig. Vergiss nicht das^und $. –

+0

@RobW - guter Punkt – adeneo

1
var ars = ["DOMAIN_SERIAL", "MAIN_DOMAINNAME", "DOMAIN_REFRESH"]; 
if(ars.some(function(ar){ return a === ar; })){ 
    // do smth 
} 
0

Ich ziehe die Regex-Lösung bereits von adeneo zur Verfügung gestellt, aber wenn Sie etwas, das entspricht die

if a is one of (... 

Formulierung aus der Frage vernünftigerweise können Sie dies tun:

if (a in list("MAIN_DOMAINNAME", "DOMAIN_SERIAL", "DOMAIN_REFRESH", "DOMAIN_RETRY")) { 
    // do something     (rest of list omitted to avoid scrolling) 
} 

durch eine Hilfsfunktion bietet die Liste in ein Objekt zu drehen:

function list() { 
    var o={}, i; 
    for (i=0; i < arguments.length; i++) o[arguments[i]] = true; 
    return o; 
} 

Natürlich können Sie die Hilfsfunktion weglassen und nur ein Objektliteral verwenden, aber das ist hässlich:

if (a in {"MAIN_DOMAINNAME":1, "DOMAIN_SERIAL":1, "DOMAIN_REFRESH":1}) { 
1

Sollte die switch-Anweisung erwähnen, wie es mit dem Beispiel in der Frage gut funktionieren sollte.

Nicht so leicht wie die anderen Antworten, aber es ist lesbar und entspricht (a === b).

Verwandte Themen