Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 8. 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
Posledné komentáre sú na spodnej časti poslednej stránky.
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/>");
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ť
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
});
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ť
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?

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é
Odpovedať
/^(web )?(app )?developer$/
Avatar
ra3sk
Člen
Avatar
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();
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ť
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í :-)

Posledné komentáre sú na spodnej časti poslednej stránky.
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.

Zobrazené 10 správy z 52.