Avatar
Matyáš Procházka:

Ahoj, řeším fakt divný problém mám tento kód. A řeším problém, že i pole "rostliny" a "kvetiny" se mažou věci. Přitom k jediném mazání v poli dochází u pole "zkousenaSlova" a "zkousenaSlovaK­vetina", které jsou kopií již zmíňovaných "rostliny" a "kvetiny".
Nevěděl by si s tím někdo rady? já na to nemůžu přijít, proč se mažou věci z tamtěch polí.

Abych vysvětlit o co v kódu jde... Nejdříve mám seznam rostlin. Poté se vygeneruje pole s obsahem kvetina_(1).. kvetina(2)...takto mám pojmenované obrázky.
Poté se zkopíruje obsah polí rostliny a kvetiny do nových zkousenaSlova a zkousenaSlovaK­vetina... Poté se zapíše jeden obrázek, tato kytka se vymaže z polí zkousenaSlova a zkousenaSlovaK­vetina... a podle toho jestli pak zadám "umim" nebo "neumim" se buď nic nestane nebo se kytka opět zapíše do seznamu zkoušených.

var rostliny = ["Bez Černý", "Bez Hroznatý (Červený)","Bodlák Obecný","Bojínek Luční","Borovice Černá","Borovice Lesní","Borovice Vejmutovka"];
var kvetiny = [];

for (i = 1; i < 8; i++) {
    kvetiny.push("Kvetina_("+i+")");
}

var cislo, neumimObrazek, umimObrazek, akualniRostlina, akualniRostlinaKvetina, uhadnuto;
var zkousenaSlova = [];
var zkousenaSlovaKvetina = [];

var zacit = function() {
    pocet = rostliny.length;
    zkousenaSlova = rostliny;
    zkousenaSlovaKvetina = kvetiny;
    zapsaniObrazku();
}

var zapsaniObrazku = function() {
    uhadnuto = pocet-zkousenaSlova.length;
    $("#pocet").text(uhadnuto + " / " + pocet);
    if (zkousenaSlova.length===0) {
        alert("Už umíš vše");
        zacit();
    }
    else {
        $("#jmeno").text("");
        cislo = Math.floor(Math.random()*(zkousenaSlova.length));
        akualniRostlina = zkousenaSlova[cislo];
        akualniRostlinaKvetina = zkousenaSlovaKvetina[cislo];
        $("#obrazek").html('<img src="poznavacka/' + akualniRostlinaKvetina + '.jpg" alt="rostlina" />');
        var index = zkousenaSlova.indexOf(akualniRostlina);
        zkousenaSlova.splice(index,1);
        zkousenaSlovaKvetina.splice(index,1);
    }}

var umim = function() {
    zobrazit();
    umimObrazek = setTimeout(function(){zapsaniObrazku()},2000);
}

var neumim = function() {
    zkousenaSlova.push(akualniRostlina);
    zkousenaSlovaKvetina.push(akualniRostlinaKvetina);
    zobrazit();
    neumimObrazek = setTimeout(function(){zapsaniObrazku()},2000);
}

var zobrazit = function() {
    $("#jmeno").text(akualniRostlina);
}

$(document).keydown(function(e) {
    switch(e.which) {
        case 37:
            umim();
            break;
        case 39:
            neumim();
            break;
        case 38:
            zobrazit();
            break;
        case 40:
            zobrazit();
            break;
        default: return;
    } e.preventDefault(); });
$(document).ready(zacit);
Editováno 8.11.2014 21:23
 
Odpovědět 8.11.2014 21:20
Avatar
Matyáš Procházka:

Omlouvám se za pravopisné chyby, psal jsem to ve spěchu :-)

 
Nahoru Odpovědět 8.11.2014 21:33
Avatar
Odpovídá na Matyáš Procházka
Michal Žůrek (misaz):

V JavaScriptu funguje referenční systém, takže když si pole kopíroval, nejspíše se zkopírovala jen reference.

// Ale moc jsem to nezkoumal, možná to be v něčem jiném.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 8.11.2014 21:38
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Matyáš Procházka:

Ale děkuji, aspoň si mě přivedl na něco, co si už sám můžu vyhledat. Třeba to tím bude.

 
Nahoru Odpovědět 8.11.2014 23:19
Avatar
Odpovídá na Michal Žůrek (misaz)
Matyáš Procházka:

Díky. Pomohlo.
kdyby někoho zajímalo řešení:

Tímto se tyto dvě pole vlastně stanou totožnými. Když změním jedno změním i durhé:

var pole1 = ["1","2","3"];
var pol2 = pole1;

Pomocí funkce slice (nevím zda je v čistém JS nebo v JQuery, každopádně mě s JQuery funguje) se pouze obsah pole1 překopíroval do pole2.

var pole1 = ["1","2","3"];
var pol2 = pole1.slice(0);
Editováno 8.11.2014 23:41
 
Nahoru Odpovědět 8.11.2014 23:41
Avatar
Odpovídá na Matyáš Procházka
Michal Žůrek (misaz):

Je v čistém js. jQuery snad pole nerozšiřuje.

Nahoru Odpovědět 9.11.2014 9:55
Nesnáším {}, proto se jim vyhýbám.
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 6 zpráv z 6.