IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 7. diel - Cyklus for v JavaScripte

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
dr.jalo2
Člen
Avatar
dr.jalo2:13.1.2015 20:10

Alternativa k mocnine. Funguje pre nulu aj zaporne cisla.

var a = 2; // Základ mocniny
var n = 3; // Exponent
n= prompt("Zadaj exponent pre zaklad 2 ");
var vysledek = 1;
for (var i = 0; i < Math.abs(n); i++)
{
    vysledek = (n>0)? (vysledek * a) : (vysledek /a) ;
}
document.write("<br/> Mocnina "+a+" na "+n+" = "+vysledek+"<br/>");
 
Odpovedať
13.1.2015 20:10
Avatar
asanos
Člen
Avatar
asanos:15.6.2015 21:16

Mám pro vás menší tip. Každý z vás už určitě někdy použil cyklus FOR pro procházení pole... a věřím, že kód který jste pro to použili byl podobný tomuhle:

for(var i=0; i < pole.length; i++){
  //udělej něco s i-tým prvkem pole
}

Problémem je, že při každém průchodu cyklem se musí znovu spočítat velikost daného pole, jestli se náhodou nějak nezměnilo. Což je pomalé.
____
Pokud nebudeme měnit velikost pole uvnitř daného cyklu, můžeme si dovolit následující způsob.

for(var i=0, length=pole.length; i < length; i++){
  //udělej něco s i-tým prvkem pole
}

Délka se vypočítá pouze jedenkrát na začátku, tzn. mnohem rychlejší ;)

Odpovedať
15.6.2015 21:16
Na světě je 10 typů lidí. Ti, kteří rozumí binárce a ti co nerozumí.
Avatar
Odpovedá na asanos
Michal Žůrek - misaz:15.6.2015 21:21

tolikrát rychlejší to teda není, navíc je to méně přehledné (protože nejpoužívanější cykl, nejen na pole, je ten první tebou zmíněný). Navíc na to existuje forEach, když už tedy chceme být důslednější...

pole.forEach(function (item) {
    // zpracování položky
});
 
Odpovedať
15.6.2015 21:21
Avatar
asanos
Člen
Avatar
asanos:15.6.2015 22:10

ok ok :D to máš asi pravdu ;)

test forEachu jsem nenašel...

http://jsperf.com/…ray-length/4

Odpovedať
15.6.2015 22:10
Na světě je 10 typů lidí. Ti, kteří rozumí binárce a ti co nerozumí.
Avatar
ra3sk
Člen
Avatar
ra3sk:11.10.2016 20:10
document.write("<ul>");
for (var i = 1; i <= 10; i++)
        document.write("<li>" + i);
document.write("</ul>");

jak je možné, že to <li> sa samo aj zavrie... respektíve to nespôsobí error?

 
Odpovedať
11.10.2016 20:10
Avatar
Pavol Hejný
Tvůrce
Avatar
Odpovedá na ra3sk
Pavol Hejný:12.10.2016 12:24

HTML je hrozně "tolerantní" na chyby. Není potřeba, aby bylo tak přísné, protože je často zcela zjevné, jak chybu opravit, protože každy tag v sobě nese určitý význam:

<table>
<tr>
<td>A
<td>B
<tr>
<td>C
<td>D
</table>

Zatímco v programovacím jazyce to nejde automaticky:

for(let y=0;y<2;y++){
for(let x=0;x<2;x++){

for(let x=0;x<2;x++){

}

Tohle se dá doplnit jako 2 nebo 3 for v sobě.

Ale pochopitelně neuzavírat značky v html je prasárna

Editované 12.10.2016 12:26
Odpovedať
12.10.2016 12:24
/^(web )?(app )?developer$/
Avatar
ra3sk
Člen
Avatar
Odpovedá na Pavol Hejný
ra3sk:17.10.2016 15:46

Díky

 
Odpovedať
17.10.2016 15:46
Avatar
Petr Vopalecký:4.3.2017 22:51

Ahoj,
poradí mi někdo jak bych mohl udělat "správně" následující hru na hádání náhodného čísla? (Pro jednoduchost [1-3]). Vím, že to má primitivní řešení, ale nemůžu přijít na to jak udělat aby každý 2. prompt nebyl prázdný (viz kód níže). Děkuji :)

var hadaneCislo = Math.floor((Math.random() * 3) + 1);

                function tipuj(){
                var tip = prompt();
                        if (tip == hadaneCislo){
                                document.write("<br>Dobře Ty!");
                } else if (tip < hadaneCislo){
                                var tip = prompt("přidej");
                        tipuj();
                } else if (tip > hadaneCislo){
                                var tip = prompt("uber");
                        tipuj();
                }
                }
                tipuj();
 
Odpovedať
4.3.2017 22:51
Avatar
koukalf
Člen
Avatar
Odpovedá na Petr Vopalecký
koukalf:21.3.2017 0:39

Ahoj, nevím jestli tě moje odpověď potěší, ale podle mě je tvůj příklad klasický cyklus - zatímco ty se ho snažíš řešit pomoci funkce. Samozřejmě to lze, jen si myslím, že je to nešťastně zvolený příklad.

Odpověď na tvou otázku je skutečně jednoduchá - vždy když zavoláš funkci, tak se provede od shora dolů a jako první řádek ve funkci máš proměnnou tip, do které jsi vložil příkaz prompt, jenž je samozřejmě prázdný.

Já bych ho řešil hlavně pomoci cyklu a to do...while -> kód se ti vykoná minimálně jednou s tím, že pokud uhádneš hra končí, pokud ne tak je nekonečná(dokud neuhádneš).

Zabalil jsem ti to i do funkce - myslím si, že to má kapku větší logiku a nechtěl jsem ti to zase celé překopat.

Jinak jsem si všiml, že pořád dokola deklaruješ proměnnou tip - stačí jednou uvnitř funkce, nemusíš se obávat, že by jsi vytvořil glob.proměnnou - navíc si tím velmi znepřehledňuješ zdrojový kód.

var hadaneCislo = Math.floor((Math.random() * 3) + 1);

var okno = confirm("Chceš hrát hru hádej číslo?");

        if(okno) {
                tipuj();
        } else {
        document.write("Dobře");
        }

                function tipuj() {

                var tip=prompt("Hádej číslo");

                do {

                if (tip < hadaneCislo){
                                tip = prompt("přidej");
                } else if (tip > hadaneCislo){
                                tip = prompt("uber");
                }

                } while(tip!=hadaneCislo);

                document.write("Dobře ty!");

                }
Odpovedať
21.3.2017 0:39
Kvalitní program je jako báseň, pokud do něj nevložíš um, tak se nedá číst.
Avatar
Odpovedá na koukalf
Petr Vopalecký:30.3.2017 11:10

Odpověď potěšila, děkuju za vysvětlení :-)

 
Odpovedať
30.3.2017 11:10
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!