Java týden Java týden
Pouze tento týden sleva až 80 % na celý Java e-learning!
Brno? Vypsali jsme pro vás nové termíny školení OOP v Brně!

Diskuze: Smazáno více prvků z pole než by mělo.

Aktivity (2)
Avatar
Adam Matis
Člen
Avatar
Adam Matis:21. ledna 21:48

Ahoj mám problém s mojí funkcí getChoices() vrací sice správný výsledek ale po jejim dokončení pole correctWords obsahuje pouze jeden záznam přitom by z tohoto pole měl by odstraněn pouze jeden index. Nevídí tam někdo tu chybu ? Ja už to několikrát procházel ale prostě to nevidím. Díky.

let correctWords = new Array(
{slovicko:'Kočka', preklad:'Cat'},
{slovicko:'Pes', preklad:'Dog'},
{slovicko:'Kralík', preklad:'Rabbit'},
{slovicko:'Moucha', preklad:'Fly'},
{slovicko:'Kůň', preklad:'Horse'}
);

let allWords = correctWords;

function getRandom(value) {
  return Math.floor(Math.random()* value );
}





function getChoices(array,all) {
  let words = new Array();
  let index = getRandom(array.length);
  words[0] = array[index];
  array.splice(index,1);


  for(let i = 1; i<4; i++) {
    index = getRandom(all.length);
    words[i] = all[index];
    all.splice(index,1);

  }

  return words;
}

let what =getChoices(correctWords,allWords);
console.log(what);
console.log(correctWords);
console.log(allWords);
Editováno 21. ledna 21:49
 
Odpovědět 21. ledna 21:48
Avatar
Petr Valigura
Redaktor
Avatar
Odpovídá na Adam Matis
Petr Valigura:21. ledna 22:32

Čau, úplně netuším co ten kód má dělat, každopádně, maže se ti to kvůli for cyklu, konkrétně

all.splice(index,1);

v all máš uloženu referenci na correctWords a ty v tom for cyklu voláš splice, které to odstraňuje, hned několikrát. Hádám, že pak to bude chtít trochu předělat ty náhodné prvky v tom for cyklu nebo pole zkopírovat, ale jak říkám netuším co je cílem kódu.

Nahoru Odpovědět 21. ledna 22:32
Občas je to tady dobrá klauniáda...
Avatar
Adam Matis
Člen
Avatar
Odpovídá na Petr Valigura
Adam Matis:21. ledna 23:15

Ahoj, děkuji za odpověď cílem je získat z pole correctWord jeden nahodný object a pak ho z tohoto pole smazat i z toho druhého pole + ten for cyklus z pole all má získat tři náhodné objekty a také smazat.

Takže hádám, že chyba byla, že se to pole do druhéhé nezkopíruje ale je to jen referenece.

 
Nahoru Odpovědět 21. ledna 23:15
Avatar
Petr Valigura
Redaktor
Avatar
Odpovídá na Adam Matis
Petr Valigura:21. ledna 23:51

Aha. To, že zkopíruješ to pole, například pomocí slice, je určitě dobré řešení, už jenom kvůli tomu, že nebudeš funkci předávat jeden objekt dvakrát.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 21. ledna 23:51
Občas je to tady dobrá klauniáda...
Avatar
Adam Matis
Člen
Avatar
Odpovídá na Petr Valigura
Adam Matis:22. ledna 14:51

Díky moc za pomoc.

 
Nahoru Odpovědět 22. ledna 14:51
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 5 zpráv z 5.