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

Javascript 选择“随机”并使用下划线从集合中删除,javascript,arrays,backbone.js,collections,underscore.js,Javascript,Arrays,Backbone.js,Collections,Underscore.js,我收集了20个结果(对象),单击按钮时我想做的是: a) 从此集合/数组中拾取随机对象 b) 当再次按下按钮时-我不希望在集合用尽之前重新拾取该对象(即,直到显示20个项目) 我曾想过只拼接出该集合的索引,但我希望使用underline.js能有一种更干净的方法 例如: var数据=[1,2,3,4,5,6,7,8,9,10,11…] var getRand=\ u0.random(0,data.length) =>3 下次按下按钮时,我不希望结果“3”在使用时重新显示 我希望这是有意义的您可以

我收集了20个结果(对象),单击按钮时我想做的是:

a) 从此集合/数组中拾取随机对象

b) 当再次按下按钮时-我不希望在集合用尽之前重新拾取该对象(即,直到显示20个项目)

我曾想过只拼接出该集合的索引,但我希望使用underline.js能有一种更干净的方法

例如:

var数据=[1,2,3,4,5,6,7,8,9,10,11…]

var getRand=\ u0.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(","));
});