我收集了 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”重新显示,因为它已被使用
我希望这是有道理的
答案 0 :(得分: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)
答案 1 :(得分: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(","));
});
答案 2 :(得分:0)
您可以创建一个数组来存储您使用过的值,并检查所有新的随机数以查看它们是否出现。虽然随机数生成器试图猜测一个数字,但这会在数组末尾变得混乱。
如果是我,我会提到您提到的内容,并在使用它们时将这些元素取出并将它们放入临时数组中。使用所有元素后,将temp数组重新分配给原始变量名。