NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 8 - Cyklus for v JavaScriptu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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/>");
 
Odpovědět
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ší ;)

Odpovědět
15.6.2015 21:16
Na světě je 10 typů lidí. Ti, kteří rozumí binárce a ti co nerozumí.
Avatar
Odpovídá 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
});
 
Odpovědět
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

Odpovědět
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?

 
Odpovědět
11.10.2016 20:10
Avatar
Pavol Hejný
Tvůrce
Avatar
Odpovídá 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

Editováno 12.10.2016 12:26
Odpovědět
12.10.2016 12:24
/^(web )?(app )?developer$/
Avatar
ra3sk
Člen
Avatar
Odpovídá na Pavol Hejný
ra3sk:17.10.2016 15:46

Díky

 
Odpovědět
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();
 
Odpovědět
4.3.2017 22:51
Avatar
koukalf
Člen
Avatar
Odpovídá 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!");

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

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

 
Odpovědět
30.3.2017 11:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 45.