变量复制错误的内容 JS



这是所有的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)

shuffle 函数对输入元素本身进行操作。由于您在随机播放函数中输入了原始信息,因此它将自行修改,因此您在记录它时会得到洗牌组。是否返回并不重要。

如果要保留原始数组,请将数组克隆到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);

最新更新