Whenever you want to pick N elements really at random out of X, the solution is the Fisher-Yates shuffle. This page has a Javascript implementation (plus rationale, plus nice animations, so go have a look):
function shuffle(array) {
var m = array.length, t, i;
// While there remain elements to shuffle…
while (m) {
// Pick a remaining element…
i = Math.floor(Math.random() * m--);
// And swap it with the current element.
t = array[m];
array[m] = array[i];
array[i] = t;
}
return array;
}
Given the shuffle, you can then pick X elements at random with
var items = shuffle($(".selectElement")).slice(0, X);
Here's a working fiddle to play with.
Footnote: since you are only interested in a certain amount of random picks, there's no need to unconditionally shuffle the whole input array as shuffle
does above; you could shuffle only a small part and then use .slice
to cut it off and work with it. I 'm leaving this as an exercise; be careful that you don't grab the *un*shuffled part by mistake!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…