Autor | Zpráva | ||
---|---|---|---|
IdemeNaHavaj Profil |
#1 · Zasláno: 23. 11. 2013, 16:53:53
Ahoj.
Mám niečo takéto if(sprava.indexOf("ako sa mas") !== -1){ API.sendChat("@"+odkoho+" "+odpovede_AkoSaMas[nahodneCislo]); } else if(sprava.indexOf("co robis") !== -1){ API.sendChat("@"+odkoho+" "+odpovede_CoRobis[nahodneCislo]); } else if(sprava.indexOf("ako sa volas") !== -1){ API.sendChat("@"+odkoho+" "+odpovede_AkoSaVolas[nahodneCislo]); a aby som nemusel dávať furt else if tak ma napadlo či sa nedá dať rovno jedna podmienka niečo ako sprava.indexOf(nejakyArray) a v tom nejakyArray by boli všetky tie stringy ako sa mas, co robis, ako sa volas atď? |
||
Kubo2 Profil |
IdemeNaHavaj:
Myslím, že také niečo nie je (opravte ma prosím, ak sa mýlim), ale dá sa to jednoducho implementovať. String.prototype.indexOfArray = function(stringList) { var matches = []; for(var i in stringList) { matches[i] = this.indexOf(stringList[i]); } return matches; } Edit: Funkciu som komplet zjednodušil, vzápätí, hneď na to, ako som sa pozrel do spätného zrkadielka na svoj príspevok, objavil som vo svojom kóde kopu hlúpostí a zbytočností :-) |
||
IdemeNaHavaj Profil |
#3 · Zasláno: 23. 11. 2013, 17:36:49
Kubo2:
a ako to použijem? stringList je ten array so stringami? |
||
Kubo2 Profil |
IdemeNaHavaj:
„a ako to použijem?“ Myslel som si, že sa spýtaš :-) // tvoje reťazce var stringy = ["Havaj", "diskutér", "Diskuse", "s"]; // vráti to pole s indexami stringov v tvojom poli stringy, ale len tie, ktoré boli nájdené var indexy = "IdemeNaHavaj je diskutér na Diskusi JPW.".indexOfArray(stringy); if (indexy[0] != -1) { // ak bol string v poli stringov nájdený // vráti na danom indexe aj pozíciu stringu // indexy[i] je pozícia reťazca stringy[i] } „stringList je ten array so stringami?“ Áno. to je on. Ten array alebo to array? Nad tá array som radšej neuvažoval. IdemeNaHavaj: Ale ak chceš robiť niečo takéto s výsledkom tej funkcie // ... for(var index in stringy) { if (matches[index] !== -1) { // .. kód } } var seno = "Reťazec, v ktorom sa budú hľadať sub-reťazce.", stringy = [...]; for(var index in stringy) { if(seno.indexOf(stringy[index]) !== -1) { // ... kód } } |
||
Chamurappi Profil |
#5 · Zasláno: 23. 11. 2013, 18:26:53
Reaguji na IdemeNaHavaje:
„aby som nemusel dávať furt else if tak ma napadlo či sa nedá dať rovno jedna podmienka“ V každé větvi děláš něco jiného, to sjednotíš jak? Upravit hledání, aby se hledalo jen jednou, jde třeba s pomocí regulárních výrazů: if(/ako sa mas|co robis|ako sa volas/.test(sprava)) { … } if(sprava.search(/ako sa mas|co robis|ako sa volas/) != -1) { … } var m = sprava.match(/(ako sa mas)|(co robis)|(ako sa volas)/); m rovno null , nebo bude jedno z m[1] , m[2] či m[3] neprázdné. Ale u else if asi stejně skončíš, protože potřebuješ provádět různé věci (alespoň dle tebou uvedeného kódu). Musel bys ty různé věci nějak učesat, aby nebyly tak moc různé.
Reaguji na Kuba2: „objavil som vo svojom kóde kopu hlúpostí a zbytočností“ To bylo o fous, už jsem si na tom chtěl smlsnout :-) Ale stejně si smlsnu na tom, že používáš for -in na pole.
Jinak bych řekl, že řešíš universálně hledání pozice v řetězci, zatímco IdemeNaHavaj potřebuje ověřit vlastně jen přítomnost podřetězce v řetězci. Kde přesně je, to už neřeší… |
||
IdemeNaHavaj Profil |
#6 · Zasláno: 23. 11. 2013, 19:06:08
Kubo2, Chamurappi:
Hej potrebujem aj že nech sa vykoná tá akcia, ku ktorému sa to práve našlo |
||
Kubo2 Profil |
#7 · Zasláno: 23. 11. 2013, 21:03:43
Chamurappi:
„Ale stejně si smlsnu na tom, že používáš for-in na pole“ Síce na tom nevidím nič zlé, ale pre istotu sa spýtam: je na to niečo iné (poprípade lepšie)? Viem, že ty si v JS macher, tak hádam mi poradíš :-) IdemeNaHavaj: „Hej potrebujem aj že nech sa vykoná tá akcia, ku ktorému sa to práve našlo.“ Môžeš si vytvoriť pole funkcí (polí?) s rovnakými indexmi ako stringy a potom to testovať: // deklarovanie premenných var stringy = ["ako sa mas", "co robis", "ako sa volas"], funkcie = [odpovede_AkoSaMas, odpovede_CoRobis, odpovede_AkoSaVolas]; // prejdenie cyklom for(var i = 0; i < stringy.length; i++) { if(sprava.indexOf(stringy[i]) !== -1) { API.sendChat("@"+odkoho+" "+funkcie[i][nahodneCislo]); break; } } |
||
1Pupik1989 Profil |
#8 · Zasláno: 23. 11. 2013, 21:54:43
Já bych to viděl asi následovně:
function ExpressionInString(string,callbacks,onerror){ for(var i in callbacks){ if(string.indexOf(i) !== -1){ callbacks[i](i); return true; } } if(typeof onerror == 'function'){ onerror(); } return false; }; var text = 'Ahoj, jak jsem Franta a mam se blbe.'; var text1 = 'Ahoj, jak jsem Franta a mam se dobre.'; var text2 = 'Ahoj, jak jsem Franta a nemam se nijak.'; var callbacks = { 'mam se dobre':function(){ alert('Asi se má dobře'); }, 'mam se blbe':function(match){ alert('Má se špatně'); } }; var onerror = function(){ alert('Nenalezen shodný výraz'); }; ExpressionInString(text,callbacks,onerror); ExpressionInString(text1,callbacks,onerror); ExpressionInString(text2,callbacks,onerror); |
||
IdemeNaHavaj Profil |
#9 · Zasláno: 24. 11. 2013, 11:18:04
1Pupik1989:
prečo je na riadku 22 vo funkcí match? |
||
1Pupik1989 Profil |
#10 · Zasláno: 24. 11. 2013, 15:18:09
IdemeNaHavaj: Protože jsem ho zapomněl smazat. A callback taky není třeba volat s parametrem i.
|
||
Časová prodleva: 10 let
|
0