Javascript: nombre Aléatoire de 5, pas de répétition jusqu'à ce que toutes ont été utilisés
Je suis en utilisant le code ci-dessous pour attribuer une classe aléatoires (sur cinq) de chaque image sur ma page.
$(this).addClass('color-' + (Math.floor(Math.random() * 5) + 1));
C'est vraiment génial de travailler, mais je veux faire en sorte qu'il n'y a jamais deux fois la même classe dans une rangée.
Serait encore mieux si il n'y a jamais deux fois le même dans une rangée, et il l'a fait aussi de ne pas utiliser n'importe quelle classe plus d'une fois jusqu'à ce que tous les 5 avait été utilisé... Comme dans, retirez chaque classe à partir de la matrice jusqu'à ce que tous d'entre eux ont été utilisés, puis recommencer, ne permettant pas la dernière des 5 et le premier des 5 prochaines à être de la même couleur.
L'espoir qui fait sens, et merci d'avance pour toute aide.
1
à 5
et mélangez l'ensemble.OriginalL'auteur user2860129 | 2013-10-14
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour créer un tableau de valeurs possibles et à chaque fois que vous récupérez un hasard index à partir de la matrice d'utiliser l'une des valeurs, de vous retirer de la pile.
Voici un objectif général de la fonction random qui ne sera pas répéter jusqu'à ce que toutes les valeurs ont été utilisées. Vous pouvez appeler cela et puis il suffit d'ajouter cet indice sur la fin de votre nom de classe.
De travail de démonstration: http://jsfiddle.net/jfriend00/H9bLH/
Donc, votre code serait juste ceci:
Voici un orientée objet formulaire qui permettra à plus d'un de ces à être utilisé dans des endroits différents dans votre application:
Exemple D'Utilisation:
De travail de démonstration: http://jsfiddle.net/jfriend00/q36Lk4hk/
J'ai ajouté à la fin.
Une amélioration est de garder le tableau d'origine et en faire une copie pour l'épissage. Lorsque tous les membres ont été épissés, faire une autre copie (si nécessaire).
pourquoi est-copie de plus simple que de créer un nouveau cas de besoin?
Parce que l'original ne peut pas être simplement une séquence de chiffres, ou ont peu d'ordre comme "couleur1", de "couleur2", etc.
OriginalL'auteur jfriend00
Vous pouvez faire quelque chose comme ceci à l'aide d'un tableau et l' splice méthode:
OriginalL'auteur Johann Echavarria
OriginalL'auteur Deepsy
Juste pour expliquer mon commentaire à jfriend00 excellente réponse, vous pouvez avoir une fonction qui renvoie les membres d'un ensemble dans un ordre aléatoire jusqu'à ce que tous ont été retournés, puis recommence, par exemple:
Si la liste peut être codé en dur, vous pouvez garder l'original dans une fermeture, par exemple
OriginalL'auteur RobG