随机选择并使用下划线从集合中删除
Pick random and remove from collection using underscore
我有一个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数组重新赋值给原始变量名。
相关文章:
- 删除集合中旧邮件/帖子的最佳方式
- 删除“;列“;来自使用Lodash的集合
- 如何选择性地从主干集合和服务器中删除模型
- 如何使用文档的ID从mongoDB集合中删除文档
- TR标记需要从表集合中删除多个类
- 从集合中删除项目时,将其从视图中删除
- 在Meteor中删除Mongo数据库集合
- 使用for.of迭代时删除集合中的元素是否安全
- 未从具有 .splice(index, 1) 的集合中删除的元素
- 如何使用猫鼬从集合中删除所有文档
- ES6:在设置/映射迭代期间从集合/映射中删除元素是否危险
- 使用 app.delete [express.js] 删除 mongo 数据库中的集合
- 如何在更新时从 mongodb 集合中删除字段
- 保存或删除集合中的模型时,主干视图不会更新
- 复合视图在扩展主干集合时未收到“删除”事件
- 主干集合无法删除项目
- 模型不会从主干集合中删除
- 流星:如何在MongoDB中单击一下即可从两个集合中删除两个文档
- 使用模板事件侦听器删除 Meteor.js 集合时出现问题
- 主干.js:从集合中删除项目