【发布时间】:2020-10-01 00:15:03
【问题描述】:
所以我一直盯着这个问题一段时间了,我不明白出了什么问题。我正在尝试创建游戏 Yahtzee,并且我有一个函数可以随机生成 5 个骰子。当用户希望再次滚动时,也会重复使用此功能。我传入一个对象数组,每个对象都有一个数字属性,表示用户滚动的内容。我遇到了这个问题,我必须生成一个新的骰子集,而不是替换旧的。这是我的功能代码
function roll(theRoll){
diceSet = theRoll;
console.log("before")
console.log(diceSet)
for(let i = 0; i < diceSet.length; i++){
if(diceSet[i].isHeld == false){
diceSet[i].number = Math.floor((Math.random() * 6) + 1);
}
document.getElementById("die" + (i + 1) + "Img").src = "img/" + diceSet[i].number + ".png";
}
console.log("After")
console.log(diceSet)
return theRoll;
}
现在我可能错了,但上面的代码应该可以正常工作,但我的“diceSet”在循环前后有相同的数字,但我不知道为什么属性没有改变。
任何帮助将不胜感激,谢谢
【问题讨论】:
-
也许在将其分配给 diceSet 之前尝试深度克隆
theRoll。您可以使用 github.com/davidmarkclements/rfdc 之类的库,也可以自己实现深度克隆。 -
好像很奇怪,我自己试过,每次都得到不同的结果,你能提供一个jsfiddle的demo吗?
-
它也因浏览器而异。唉,可以做得更一致
-
所以当我遇到这个问题时,我使用的是 chrome,还有 ElectricShadow,我很想使用库来克隆,但是,由于项目的性能问题,我不能使用任何外部库