2013-04-12 58 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/