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

4
我想从一个输入元素的数组中随机选择随机数量的输入项。如果我使用下面的方法,我只能得到一个随机项。
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')

但是我想在数组中随机选择一定数量的项目。

3个回答

7
您可以使用jQuery的.filter()方法与一个函数一起使用:
$('div').filter(function(){
    return (Math.round(Math.random()) == 1);
}).css({background: 'red'});

jsFiddle example


4

您目前正在检查索引是否等于随机数。也许更好的方法是为每个输入生成一个随机数,并检查它是否大于1或小于1。因此,随机生成0到2之间的数字。类似以下内容:

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

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

如果您从一个元素获取属性,则只会从第一个元素获取。


1
我向你提出一个非jQuery的解决方案,用于从数组arr中随机获取 count 个元素。
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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接