我正在尝试创建纸牌洗牌程序,该程序从数组中返回随机纸牌,然后删除该数组项,因此无法再次处理。然后,该程序重复。我已经为此工作了一段时间,似乎没有任何效果。我认为问题在于该程序无法访问更新数组/该程序未以线性顺序执行,但我不确定。
var shuffler = {
cards: [...],
displayCard1: function() {
document.getElementById("card-1").style.backgroundImage = 'url(' +
this.cards[this.randomizer()] + ')';
},
displayCard2: function() {
document.getElementById("card-2").style.backgroundImage = 'url(' +
this.cards[this.randomizer()] + ')';
},
...
},
randomizer: function() {
var randomized = Math.floor(Math.random() * this.cards.length);
this.cards.splice(this.randomized, 1);
return randomized;
}
};
shuffler.displayCard1();
shuffler.displayCard2();
...
答案 0 :(得分:1)
这对我有用:
randomizer: function() {
// take shuffle from your array
var randomized = this.cards[Math.floor(Math.random() * this.cards.length)];
// Get Index of element to be removed
const index=this.cards.indexOf(randomized);
// remove element at this index
this.cards.splice(index, 1);
}
现在您可以直接致电
this.randomizer();
答案 1 :(得分:0)
您从数组中删除了元素,然后尝试显示该元素:
this.cards[this.randomizer()]
其中radomizer已经删除了您要访问的卡。现在,您将访问阵列中的下一张卡片,或者可能不在阵列末端。
答案 2 :(得分:0)
let removedCard = this.cards.splice(this.randomizer(), 1)
除了将randomizer()
函数更改为不拼接卡片外,仅返回随机索引即可。
randomizer: function() {
return Math.floor(Math.random() * this.cards.length);
}