2016-01-20 14 views
6

Próbuję napisać oświadczenie "przełącznik", ale mam ściśle określony przypadek i chcę użyć jak najmniej kodu, jak mogę. Tak zastanawiałem się, jak to zrobić jedna myśl przyszła mi do głowy, jest to możliwe, aby dodać „jeśli” oświadczenie w „przełącznik” więc jeśli to „jeśli” stwierdzenie jest prawdziwe, aby dodać więcej przypadków do mojego "przełącznik". Na przykład:Czy mogę w jakiś sposób użyć instrukcji w przełączniku, aby dodać więcej przypadków?

switch(myVar) { 
    case 1: 
     return 'Your variable is 1'; 
    case 2: 
     return 'Your variable is 2'; 
    if(yourVar && yourVar === true) { 
     case 3: return 'Your variable is 3'; 
    } 
    default: return 0; 
} 

P.S. Rzeczywisty scenariusz, którego używam, jest znacznie bardziej skomplikowany, a kod jest naprawdę długi, więc wszelkie sugestie są mile widziane, jeśli pasują do przypadku użycia.

+0

Co jeśli zamknąć 'przełącznika (MyVar)' na końcu 'case2' następnie użyć instrukcji if, aby zdecydować, czy zdefiniować inny" przełącznik "czy nie? – sinaza

+1

Nie jest to niemożliwe. Domyślnie złap te, które mają specjalne reguły, a następnie użyj, jeśli warunki. –

+0

Aby przyszli użytkownicy wiedzieli, byłoby dobrze, gdybyś zaakceptował odpowiedź, która najlepiej rozwiąże twoje pierwotne pytanie, ponieważ nie jest to złe pytanie, nawet jeśli znalazłeś inny sposób przez zrekonstruowanie początkowego kodu. – LGSon

Odpowiedz

1

Można to zrobić

function test(myVar, yourVar) { 
 

 
    switch(myVar) { 
 
    case 1: return '1'; 
 
    case 2: return '2'; 
 

 
    default: 
 
     // as requested in a comment, add yourVar to myVar 
 
     if(myVar != undefined && yourVar != undefined) return myVar + yourVar; 
 

 
     return '0'; 
 
    } 
 
} 
 

 
alert(test(2)); 
 
alert(test(3)); 
 
alert(test(3,5)); 
 
alert(test(3,0));

+0

To może faktycznie działać z tym, ale nie jestem pewien, czy to jest najlepszy sposób. Mimo to, dziękuję za sugestię, rozważę to. –

+0

Twoja sugestia nie będzie działać dla mnie, ponieważ jest to coś, co powinienem narysować na stronie internetowej. Bardziej szczegółowe, jeśli warunek "twoja_wartość === prawda" powinienem narysować rozwijaną stronę internetową z myVar + twoją liczbą elementów, jeśli jest to fałsz, nie powinienem narysować elementów "twoja_wartość". Przepraszam, jeśli nie jestem wystarczająco jasny. –

+0

@GeorgePandurov Zaktualizowałem swoją pierwszą próbkę. Czy ta logika działa dla ciebie? – LGSon

2

Może przenieść logika trochę. Można pominąć instrukcję break, ponieważ kończy się ona funkcją return.

switch(true) { 
    case myVar === 1: 
     return 'Your variable is 1'; 
    case myVar === 2: 
     return 'Your variable is 2'; 
    case yourVar: 
     return 'Your variable is 3'; 
    default: 
     return 0; 
} 
+1

Cóż, właściwie w moim prawdziwym kodzie projektu nie ma przerwy, po prostu przypadkowo umieściłem to tutaj (naprawię to teraz). O twojej sugestii pomyślę o tym i zobaczę, czy będę mógł go użyć w moim przypadku. –

+0

Aby coś dodać, faktycznie w moim projekcie musiałem sprawdzić wartość, a nie czy jest to prawda czy fałsz, więc twoja sugestia nie mogła mi pomóc. –

+0

Porównanie nie jest pierwotne między przełącznikiem a obudową, ale najpierw w miejscu przypadku, a następnie z wartością true (przełącznik), aby można było porównać wszystko w miejscu przypadku i porównać je z miejscem przełączania. może lepiej, jeśli dodasz prawdziwy problem. –

2

Przenieś test wewnątrz obudowy, i nie mieści się, jeśli nie:

switch(myVar) { 
    case 1: 
    return 'Your variable is 1'; 
    case 2: 
    return 'Your variable is 2'; 
    case 3: 
    if (yourVar) return 'Your variable is 3'; 
    /* fall through */ 
    default: 
    return 0; 
} 
0

switch(myVar) { 
 
    case 1: 
 
     return 'Your variable is 1'; 
 
    case 2: 
 
     return 'Your variable is 2'; 
 
    case 3: 
 
     if(yourVar && yourVar === true) { 
 
     return 'Your variable is 3'; 
 
     }else{ 
 
     return 0: 
 
     } 
 
    default: return 0; 
 
}

Powiązane problemy