2014-03-13 71 views
0

我有两个数组(代表一副牌),一个填充1-52值,另一个填满任何东西。我想从第一个数组中随机取出该位置,并将该对象放入随机数组中的下一个位置。我有这个至今:取一个数组并将它随机化到另一个数组中

var shufdeck = new Array(); 
while(sufdeck.length < 52) 
{ 
    i = Math.floor(Math.random()*52); 
    //shufdeck[0] = deck[i] etc. 
} 

我不知道我是否应该使用拼接或别的东西,把它拿出来的第一阵列,并把它放到第二位。如果可能的话,应该填充shufdeck []并且甲板[]将是空的。

How can I shuffle an array?

+2

http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle – Matt

+0

你关心原来的甲板[]是否是空的最后,还是你只需要shufdeck []是一个洗牌版的甲板[]? – gpcz

+0

我只需要填充shufdeck []。如果可能的话,原来的甲板[]应该是空的。 – user3413170

回答

2

是的,你应该拼接所选择的卡,所以:

var shuffledDeck = []; 

while (deck.length) { 
    shuffledDeck.push(deck.splice(Math.random()*deck.length | 0, 1)[0]); 
} 

,或者是一个小更高效:

var i = deck.length; 
while (i) { 
    shuffledDeck.push(deck.splice(Math.random()*i-- | 0, 1)[0]); 
} 

注意,这会破坏甲板。如果你不希望出现这种情况,首先将它复制:

var deckToShuffle = deck.slice(); 
相关问题