3

我收集了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”重新出现,因为它已被使用

我希望这是有道理的

4

3 回答 3

1
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)
于 2013-04-12T06:58:48.700 回答
1
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/

于 2013-04-12T11:38:17.467 回答
0

您可以创建一个数组来存储您使用的值并检查所有新的随机数以查看它们是否出现。尽管随机数生成器试图猜测单个数字,但这会在数组末尾附近变得混乱。

如果是我,我会按照您的暗示进行操作,并在使用时取出元素并将它们放入临时数组中。使用所有元素后,将临时数组重新分配给原始变量名称。

于 2013-04-12T05:51:46.247 回答