随机选择并使用下划线从集合中删除

Pick random and remove from collection using underscore

本文关键字:集合 删除 下划线 选择 随机      更新时间:2023-09-26

我有一个20个结果(对象)的集合,当一个按钮被点击时,我想做的是:

a)从集合/数组中随机选择一个对象

b)当按钮再次按下时-我不希望该对象被重新选中,直到集合耗尽(即直到20项显示)

我想只是拼接出该集合的索引,但我希望使用Underscore.js有一个更干净的方式

的例子:

var data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11...]

var getRand = _.random(0, data.length);

= => 3

下次我按下按钮时,我不希望结果"3"重新出现,因为它已经被使用过

var data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
// cache indexes
var cache = _.map(new Array(data.length + 1).join(), function (item, index) {
  return index;
});
// get random from cached array
var rand = _.random(0, cache.length);
// remove random index from cache
cache.splice(rand, 1);
console.log(rand, cache)
var data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
var picked = [];
$("#link").click(function() {
   if(data.length == 0) return;
   var pick = data.splice(_.random(0,data.length),1);
   picked.push(pick);
   $("#pick").html(pick);
   $("#data").html(data.join(","));
   $("#picked").html(picked.join(","));
});
http://jsfiddle.net/Z3vjk/

您可以创建一个数组来存储您使用过的值,并检查所有新的随机数是否出现。当随机数生成器试图猜测单个数字时,这将在数组末尾变得混乱。

如果是我,我就会像你暗示的那样,在使用元素的时候把它们取出来,放在一个临时数组中。一旦使用了所有元素,将temp数组重新赋值给原始变量名。