J'espère que je peux décrire cela correctement.

J'ai créé un élément HTML de modèle à remplir par les informations d'un tableau lorsque j'exécute une fonction onclick. Il y aura différents tableaux donc je les ai mis sur un tableau beaucoup plus grand. Maintenant, ce que j'espérais faire, c'est pouvoir appeler un tableau aléatoire hors du tableau principal, puis aussi pouvoir appeler les éléments individuels du tableau aléatoire.

J'ai essayé de créer un randomizer d'index et j'ai appelé les tableaux avec ... cela a bien fonctionné mais vous êtes lié pour obtenir le même ensemble ...

J'ai lu et essayé l'épissage, et la logique fonctionne bien. Console.logs montre que j'ai un tableau aléatoire, mais lorsque j'essaye d'extraire des éléments du tableau, je reçois "indéfini".

Voici une vue du code:

object00 = ["Cat", "Dog", "Cow", "Goat"];
object01 = ["Apple", "Banana", "Orange", "Manggo"];
.
.
.

mainArray = [object00, object01, . . .];

function next () {
  if(mainArray.length == 0) return;
  array = mainArray.splice(Math.floor(Math.random() *mainArray.length),1);
  console.log(array); //displays [Array (4)]
  console.log(array[1]); //displays undefined
}

J'ai lu que les éléments épissés ne peuvent pas être enchaînés: est-ce le cas?

J'apprécierais que quelqu'un puisse m'expliquer ce qui se passe et comment je peux contourner le problème.

1
Kirk Macarandan 17 avril 2020 à 17:31

2 réponses

Meilleure réponse
console.log(array); //displays [Array (4)]

Si cela se produit, votre tableau doit être array [0] donc pour accéder à un élément, vous devez faire:

console.log(array[0][1]) //1. element
console.log(array[0][3]) //3. element

Ou vous pouvez le faire:

array = mainArray.splice(Math.floor(Math.random() *mainArray.length),1)[0]

Vous pouvez maintenant accéder à un élément comme celui-ci:

console.log(array[1]) //1. element
console.log(array[3]) //3. element
0
Ufuk 17 avril 2020 à 14:46

Votre épissure renvoie un sous-tableau. dans votre cas est un sous-tableau de longueur 1, qui comprend un tableau. Donc en fait, vous avez un tableau à 2 dimensions. pour accéder au tableau cible, vous devez d'abord l'obtenir (array[0]).

Quoi qu'il en soit, je pense que la meilleure solution sera juste de trier aléatoirement le mainArray puis de le parcourir de l'index 0 vers array.length-1.

Pour randomiser l'utilisation du tableau:

mainArray = mainArray.sort((a,b) => Math.random() - .5)

Exemple en direct:

var array = [1, 2, 3, 4, 5, 6, 7, 8];
var shuffled = array.sort((a,b)=> Math.random()-.5)
console.log(shuffled)
0
Yosef Tukachinsky 17 avril 2020 à 14:52