2013-04-12 20 views
2

我有20个结果(对象)的集合,并想什么,我一个按钮被点击时做的是:随机挑选并使用从集合中删除强调

一)选择一个从当再次按下按钮此集合/数组

二)随机对象 - 我不想,直到收集耗尽该对象重新拾起(即,直到显示的20个项目)

我想只是拼接出该集合的索引,但我希望使用更简洁的方式使用Underscore.js

例:

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

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

==> 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) 
0

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

如果是我,我会只是你所提到的,当你使用它们并将它们放入一个临时数组中时将它们取出。一旦使用了所有元素,将temp数组重新分配给原始变量名称。

+0

的你提到的标签问题得到更多的答案,这是非常有用的。 –

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/