Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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: Smazáno více prvků z pole než by mělo.

Aktivity
Avatar
Adam Matis
Člen
Avatar
Adam Matis:21.1.2019 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.1.2019 21:49
 
Odpovědět
21.1.2019 21:48
Avatar
Petr Valigura
Tvůrce
Avatar
Odpovídá na Adam Matis
Petr Valigura:21.1.2019 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.1.2019 22:32
Občas je to tady dobrá klauniáda...
Avatar
Adam Matis
Člen
Avatar
Odpovídá na Petr Valigura
Adam Matis:21.1.2019 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.1.2019 23:15
Avatar
Petr Valigura
Tvůrce
Avatar
Odpovídá na Adam Matis
Petr Valigura:21.1.2019 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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
21.1.2019 23:51
Občas je to tady dobrá klauniáda...
Avatar
Adam Matis
Člen
Avatar
Odpovídá na Petr Valigura
Adam Matis:22.1.2019 14:51

Díky moc za pomoc.

 
Nahoru Odpovědět
22.1.2019 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.