• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Instrukcja switch - czy można podstawić zmienną wewnątrz metody podczas deklarowania warunku (expression)?

Object Storage Arubacloud
0 głosów
361 wizyt
pytanie zadane 4 listopada 2015 w JavaScript przez ScriptyChris Mędrzec (190,190 p.)
edycja 4 listopada 2015 przez ScriptyChris

Czy jest możliwość, aby switch działał w taki sposób, aby móc wstawić do dowolnej metody, w moim przypadku -  indexOf() - zmienną i w poszczególnych case sobie wybierać co tam powinno być?:

var arr = ["awd audi", "rwd bmw", "rwd mercedes", "fwd fiat", "awd subaru"];
var wybor;

for (index in arr)
{
    switch (arr[index].indexOf(wybor) == 0)
    {
        case 'rwd': console.log("Samochod "+arr[index]); break;
    }
}

Gdy zapiszę zamiast switch'a poniższy if, to działa dobrze, ale jak to zrobić na switch'u?

wybor = 'rwd';
if (arr[index].indexOf(wybor) == 0) console.log(arr[index]);

 

2 odpowiedzi

+1 głos
odpowiedź 4 listopada 2015 przez Comandeer Guru (602,340 p.)
wybrane 3 stycznia 2016 przez ScriptyChris
 
Najlepsza
To takie trochę bez sensu… Nie bardzo wiem co chcesz osiągnąć tym switchem?
komentarz 4 listopada 2015 przez ScriptyChris Mędrzec (190,190 p.)

Chcę aby switch rozpoznawał czy na danej pozycji (np. indexOf(wybor) > 0) w elemencie tablicy znajduje się określony wyraz - i dopiero ten wyraz określać w poszczególnych case.

komentarz 5 listopada 2015 przez Comandeer Guru (602,340 p.)
if ( arr.indexOf( wybor ) > 0 ) {
    switch( wybor) {
      case 'rwd': break;
      case 'costam': break;
   }
}

 

+1 głos
odpowiedź 4 listopada 2015 przez writen Nałogowiec (29,060 p.)

Tak można zrobić switcha, ale nie w taki sposób. Żaden z tych kodów i tak nie spełni swojej roli, bo warunki nigdy się nie spełnią. Raz, że błędnie używasz switcha - w nawiasie nie podaje się warunku. Wartość wyrażenia padnego w nawiasie podaje się po słówku case. Dwa, w tablicy nie masz takiej wartości jak 'rwd'.

Poprawnie mogłoby to wyglądać tak:

var arr = ["awd audi", "rwd bmw", "rwd mercedes", "fwd fiat", "awd subaru"];

var wybor = "awd audi";
 
for (index in arr)
{
    switch (arr[index].indexOf(wybor))
    {
        case 0: console.log("Samochod "+arr[index]); break;
    }
}

Tylko po co? Po co switch? Po co warunek? Wypisać wartość z tablicy możesz bez jakiegokolwiek warunku.

komentarz 4 listopada 2015 przez ScriptyChris Mędrzec (190,190 p.)

Mniej więcej o to mi chodzi, z tym że ja chcę w case określać co ma wyszukać metoda indexOf, a nie chce określać na której pozycji tablicy ma to znaleźć.

Ten przykład to oczywiście uproszczenie. Mam tablicę, która zawiera kilka linijek tekstu. Chcę aby switch rozpoznawał czy na danej pozycji (np. indexOf(wybor) > 0) w elemencie tablicy (czyli linijce) znajduje się określony wyraz - i dopiero ten wyraz określać w poszczególnych case.

 

komentarz 4 listopada 2015 przez writen Nałogowiec (29,060 p.)
Dobra, tam wyżej się trochę pomyliłem. Ale nadal nie rozumiem po co ci ten swich. Switch nie może rozpoznać czegoś takiego indexOf(wybor) > 0, no bo w jaki sposób? Switch to jest tylko przełącznik wykonujący kod w zależności od podanego parametru.
komentarz 4 listopada 2015 przez ScriptyChris Mędrzec (190,190 p.)

Switch to jest tylko przełącznik wykonujący kod w zależności od podanego parametru.

To ja chcę, aby switch wykonał kod w zależności czy w case znajduje się napis, który ma zostać znaleziony w deklaracji switcha.

Szersze przykład:

var arr = ["awd audi", "rwd bmw", "rwd mercedes", "fwd fiat", "awd subaru","fwd peugeot","rwd porsche","rwd ferrari","awd lamborghini","fwd honda"] ;				
var wybor;			
for (index in arr)
{
	switch(/* Znajdź mi element tablicy, który na początku ma wyraz podany w CASE.*/)
	case 'rwd': console.log("Samochod "+arr[index]); break;
}				
//Output: "rwd bmw", "rwd mercedes","rwd porsche","rwd ferrari"
				
var arr1 = ['samochod szybki','rower wolny','motocykl szybki','prom wolny'];
var wybor;
for (index in arr1)
{
	switch(/* Znajdź mi element tablicy, który na dalszej pozycji ma wyraz podany w CASE.*/)
	case 'wolny': console.log("Transport "+arr1[index]); break;
}				
//Output: 'rower wolny','prom wolny'

Generalnie jeśli switch to obsługuje, to chce aby CASE wybierał to, co ja zapiszę w zmiennej 'wybor' i umieszczę w metodzie indexOf(). Albo może inaczej można zmusić case aby obsługiwał to, co umieści się w metodzie będącej w miejscu deklaracji switcha?

Podobne pytania

+1 głos
1 odpowiedź 534 wizyt
pytanie zadane 9 lutego 2022 w C i C++ przez Dynamic Bywalec (2,910 p.)
+3 głosów
1 odpowiedź 379 wizyt
pytanie zadane 22 października 2021 w C i C++ przez CrisGoldmann Nowicjusz (200 p.)
0 głosów
3 odpowiedzi 178 wizyt
pytanie zadane 13 grudnia 2019 w C i C++ przez amtrax Dyskutant (9,630 p.)

92,624 zapytań

141,482 odpowiedzi

319,824 komentarzy

62,006 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...