2013-07-26 35 views
5

Jestem nowy w javascript i wciąż pogodzę się z niuansami tego języka.Lepsza metoda sprawdzania wielu warunków.

Mam fragment kodu, w którym muszę sprawdzić zestaw warunków dla konkretnej zmiennej.

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

Czy istnieje lepszy sposób to zrobić warunkowego sprawdzanie, jak mówią:

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

Odpowiedz

13

Zakładając stosunkowo nowoczesną przeglądarkę, można użyć Array.indexOf(spec)

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

Uwaga - można go łatwo pasowana dla starszych przeglądarek (patrz the mdn link w jaki sposób).

+5

8 Upvotes w ciągu minuty dla tak trywialnej odpowiedzi O_o (i brak na pytanie). –

+1

+1 za shim .. i wyjaśnienie punktu Modern Browser :) –

+1

Proste i eleganckie rozwiązanie .... :) –

2

regex byłby krótszy i działa wszędzie:

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

FIDDLE

+2

To nie jest odpowiednik. Nie zapomnij o^i $. –

+0

@RobW - dobry punkt – adeneo

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

wolę rozwiązania regex już dostarczone przez adeneo, ale jeśli chcesz coś, co pasuje do

if a is one of (... 

sformułowanie z pytania w miarę możliwości można zrobić:

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

poprzez zapewnienie funkcji pomocnika, aby włączyć listę do obiektu:

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

Oczywiście można pominąć funkcję pomocnika i po prostu użyć obiektu dosłowny, ale to brzydkie:

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

Należy wymienić instrukcję przełącznika, ponieważ powinna działać poprawnie na przykładzie podanym w pytaniu.

switch(a) { 
    case('MAIN_DOMAINAME'): 
    case('DOMAIN_SERIAL'): 
    case('DOMAIN_REFRESH'): 
    case('DOMAIN_RETRY'): 
    console.log('Go wild.'); 
    break; 
} 

Nie tak lekki jak inne odpowiedzi, ale jest czytelny i pasuje (a === b).

Powiązane problemy