这是所有的js代码,当我在控制台中记录原始变量时,它返回经过改组的平台,我不明白,我是js的新手,我已经尝试过了。但是我真的不知道它是如何工作的,而且,如果你们不介意我问的话,var和let有什么区别?谢谢。
function drawDeck(){
var deck = []
var value = [2,3,4,5,6,7,8,9,10,10,10,10,11]
for(var i=0;i<4;i++){
for (var j=0;j<13;j++){
deck.push(value[j])
}
}
return deck
}
function shuffleDeck(deck){
var currentPos = deck.length, tempPos , randPos
while (currentPos != 0){
randPos = Math.floor(Math.random() * currentPos)
currentPos -= 1
tempPos = deck[currentPos]
deck[currentPos] = deck[randPos]
deck[randPos] = tempPos
}
return deck
}
function drawCard(deck){
var card = deck.shift()
return card
}
var raw = drawDeck()
var deck = shuffleDeck(raw)
var card = drawCard(deck)
console.log(raw)
答案 0 :(得分:1)
随机播放功能对输入元素本身进行操作。由于您将原始输入到随机播放功能中,因此它自身会被修改,因此您在登录时会获得随机播放的牌组。是否退回都没关系。
如果要保留原始数组,请将数组克隆到shuffle函数内的新变量中,然后在克隆上进行改组并返回。
var raw = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
var shuffled;
function shuffleDeck(deck) {
var currentPos = deck.length,
tempPos, randPos
var tempDeck = Array.from(deck);
while (currentPos != 0) {
randPos = Math.floor(Math.random() * currentPos)
currentPos -= 1
tempPos = tempDeck[currentPos]
tempDeck[currentPos] = tempDeck[randPos]
tempDeck[randPos] = tempPos
}
return tempDeck
}
shuffled = shuffleDeck(raw);
alert('original: ' + raw);
alert('shuffled: ' + shuffled);