2013-12-10 79 views
1

我倒是想從一個javascript獲得隨機變量和它前面加上到這樣一個div容器:的Javascript得到隨機變量從數組,但每個只有一次

// my Array 
var thumbnailArray = new Array(); 
thumbnailArray[0] = 'contentarray1'; 
thumbnailArray[1] = 'contentarray2'; 
thumbnailArray[2] = 'contentarray3'; 


function thumbnailquery() { 
for (var i = 0; i <= 3; i++) { 
$('#myDiv').prepend(thumbnailArray[Math.floor(Math.random() * thumbnailArray.length)]) 
} 
} 

現在,我怎麼能保證每個變量只採取一次,但仍然是隨機的?

謝謝

+1

你是否必須將元素留在數組中?如果沒有,你可以在選中數組後將它從數組中刪除。 –

+0

hm它會更好,如果它會留在那裏 –

回答

3

洗牌值的陣列和流行,而不是

function shuffle(a) { 
    var c=a.length,t,r; 
    while (0 !== c) { 
    r = Math.floor(Math.random() * c); 
    c -= 1;t = a[c];a[c] = a[r];a[r] = t; 
    } 
    return a; 
} 

var thumbnailArray = [ 
    'contentarray1', 
    'contentarray2', 
    'contentarray3' 
]; 

shuffle(thumbnailArray); 
thumbnailquery(); 

function thumbnailquery() { 
    for (var i = 0; i <= 3; i++) { 
     $('#myDiv').prepend(thumbnailArray.pop()); 
    } 
} 

FIDDLE

+0

爲我完美的解決方案謝謝 –

1

複製數組。然後刪除從複製數組中取得的對象。

+0

['Array.prototype.splice()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array /拼接)供參考 – jwueller

1

有沒有優雅的方式來做到這一點,你描述的方式。你可以構造一個「選擇索引」的數組,並確保每個隨機數在該數組中都不存在,但是這種情況的最壞情況下的無窮大操作時間非常不推薦。

你最好的選擇是洗牌數組,然後迭代,按順序選擇元素(洗牌順序)。

看到這個堆棧溢出的一個很好的方式在JavaScript 洗牌數組How can i shuffle an array in JavaScript?

相關問題