var items = Array(523, 3452, 334, 31, ..., 5346);
Comment obtenir un élément aléatoire de items
?
var items = Array(523, 3452, 334, 31, ..., 5346);
Comment obtenir un élément aléatoire de items
?
Si je copie/colle ceci dans ma source, j'obtiens un 'Uncaught SyntaxError : Unexpected token" dans mon navigateur. Y a-t-il des caractères cachés qui sont copiés à partir des réponses de l'OS ?
Math.random() ne sera jamais égal à 1, et ne devrait pas l'être. Le plus grand indice doit toujours être inférieur d'une unité à la longueur, sinon vous obtiendrez un message d'erreur. undefined
erreur.
Une solution élégante. Je l'ai testée : var items = ["a","e","i","o","u"]
var objResults = {}
for(var i = 0; i < 1000000; i++){
var randomElement = items[Math.floor(Math.random()*items.length)]
if (objResults[randomElement]){
objResults[randomElement]++
}else{
objResults[randomElement] = 1
}
}
console.log(objResults)
Les résultats sont assez aléatoires après 1000000 itérations : Object {u: 200222, o: 199543, a: 199936, e: 200183, i: 200116}
Utilisez le trait de soulignement (ou loDash :)) :
var randomArray = [
'#cc0000','#00cc00', '#0000cc'
];
// use _.sample
var randomElement = _.sample(randomArray);
// manually use _.random
var randomElement = randomArray[_.random(randomArray.length-1)];
Ou pour mélanger un tableau entier :
// use underscore's shuffle function
var firstRandomElement = _.shuffle(randomArray)[0];
Utiliser underscore ou lodash pour une seule fonction serait excessif, mais si vous réalisez une fonctionnalité js complexe, cela peut vous faire gagner des heures, voire des jours.
Si la valeur minimale de l'indice d'underscore random
est 0, elle n'a besoin que de la valeur maximale. Docs ici
Aujourd'hui, l'underscore est également un meilleur choix pour cela. _.sample([1, 2, 3, 4, 5, 6])
Si vous voulez vraiment doit utiliser jQuery pour résoudre ce problème (NB : vous ne devriez pas) :
(function($) {
$.rand = function(arg) {
if ($.isArray(arg)) {
return arg[$.rand(arg.length)];
} else if (typeof arg === "number") {
return Math.floor(Math.random() * arg);
} else {
return 4; // chosen by fair dice roll
}
};
})(jQuery);
var items = [523, 3452, 334, 31, ..., 5346];
var item = jQuery.rand(items);
Ce plugin retournera un élément aléatoire si on lui donne un tableau, ou une valeur de [0 n) si on lui donne un nombre, ou n'importe quoi d'autre, une valeur aléatoire garantie !
Pour plus de fun, le retour du tableau est généré en appelant la fonction récursivement en fonction de la longueur du tableau :)
Démonstration de travail à http://jsfiddle.net/2eyQX/
@neoascetic le point de cette ligne est que choisir un élément d'un tableau n'est pas un problème de jQuery, c'est un problème de JS générique.
+1 pour le bon lancer de dés ! Pour les pauvres âmes qui ne comprennent pas la plaisanterie.
@damd re : your proposed edit - it was clearly incorrect, since there's a clear split between définir le plugin dans l'IIFE, et l'utilisation du plugin. Cependant, pour des raisons de cohérence, j'ai remplacé le $
dans la ligne d'utilisation avec jQuery
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
396 votes
La réponse n'impliquera pas jQuery
52 votes
Je n'ai jamais vu autant de réponses absolument identiques à une question...
11 votes
Les grands esprits, @Blindy
0 votes
Sauf que cette fois-ci, il s'agissait de chiffres au lieu de mois, hein ? :-P
36 votes
J'ai trouvé un moyen d'impliquer jQuery !! (voir ma deuxième réponse)
11 votes
Cette question est absolument identique à Obtenir une valeur aléatoire à partir d'un tableau Pourtant, les puissants modérateurs n'ont pas pris la peine de le fermer depuis plus de trois ans. Au lieu de cela, ils ont fermé questions "non constructives" avec des centaines de votes .
0 votes
Cette question a maintenant plus de votes que la question "non constructive".
0 votes
Toutes les réponses à ce problème sont fondamentalement fausses d'après ce que je peux voir et chacune ne fait que copier les autres. Que se passe-t-il si des éléments du tableau ont été supprimés ([0],[1],[3],[4]...) ? Que se passe-t-il si des éléments sont ajoutés de telle sorte que les clés ne sont pas une valeur constamment incrémentée mais ont une autre signification (comme un identifiant d'utilisateur unique ([3453],[4316],[73698],[924]...). Est-ce que les gens sont tellement bloqués sur la façon d'utiliser correctement Math.random() qu'ils négligent ce point ?