如何在数组中随机选择随机数量的项目

时间:2011-11-29 08:31:53

标签: javascript jquery

我想在输入元素数组中随机选择随机数量的输入。
如果我使用以下方法我可以得到一个随机项目

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')

但我希望在数组中随机选取随机数i =。

3 个答案:

答案 0 :(得分:7)

您可以将jQuery的.filter()方法与函数一起使用:

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

jsFiddle example

答案 1 :(得分:4)

您当前正在检查索引是否等于随机数。也许最好为每个输入生成一个随机数,并检查它是否大于1或更小。所以随机化一个介于0和2之间的数字,例如:

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

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

此外,如果你从一个元素中得到一个道具,它只能从第一个得到它。

答案 2 :(得分:1)

我建议你回答一个关于如何从数组count中随机获取arr个元素的问题的非jQuery答案

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;
};

此函数可确保保留原始数组并正确处理undefined