2011-11-29 5 views
4

Je veux prendre nombre aléatoire d'entrées au hasard dans un ensemble d'éléments d'entrée ..
Si j'utilise la méthode ci-dessous je peux obtenir un élément aléatoireComment choisir nombre aléatoire d'éléments au hasard dans un tableau

jQuery.jQueryRandom = 0; 
jQuery.extend(jQuery.expr[":"], 
{ 
    random: function(a, i, m, r) { 
    if (i == 0) { 
     jQuery.jQueryRandom = Math.floor(Math.random() * r.length); 
    }; 
    return i == jQuery.jQueryRandom; 
} 
}); 

$("input:random").prop('id') 

Mais je veux que le nombre aléatoire i = d'éléments soit choisi au hasard dans un tableau.

Répondre

7

Vous pouvez utiliser la méthode .filter() jQuery avec une fonction:

$('div').filter(function(){ 
    return (Math.round(Math.random()) == 1); 
}).css({background: 'red'}); 

jsFiddle example

+0

Réponse parfaite :-) – Exception

4

Vous regardez actuellement si l'indice est égal au nombre aléatoire. Peut-être qu'il vaut mieux générer un nombre aléatoire pour chaque entrée et vérifier si elle est plus grande que 1 ou plus petite. Donc randomisez nombre entre 0 et 2. quelque chose comme:

jQuery.extend(jQuery.expr[":"], 
{ 
    random: function(a, i, m, r) { 
    return Math.random() > 0.5; 
} 
}); 

alert($("input:random").length); 

Aussi, si vous obtenez un accessoire d'un élément, il ne l'obtenir de la première.

1

Je propose une réponse non-jQuery pour vous la question sur la façon d'obtenir des éléments count au hasard d'un tableau arr

var pickRandom = function (arr, count) { 
    var out = [], i, pick, clone = arr.slice(0, arr.length); 
    for (i = 0; i < count; i ++) { 
    pick = Math.floor(Math.random() * clone.length); 
    if (clone[pick] !== undefined) { 
     out.push(clone[pick]); 
     clone.splice(pick, 1); 
    } 
    } 
    return out; 
}; 

Cette fonction assure que le tableau d'origine est conservée et gère undefined correctement les valeurs

Questions connexes