我有一个对象数组。它们中的每一个都具有与其他属性相同的属性,但具有不同的值。我想访问这个数组中一个随机对象的属性,但只是一次 - 所以当我随机获得该对象时,它不再是在数组中。
因此,我只使用三个对象作为开头创建数组,并创建一个将通过单击按钮调用的函数。该函数创建2个变量 - 一个用于存储从Math.random()的乘法接收的随机数和数组的长度,由Math.floor()舍入。
第二个变量是从数组中存储一个已删除的项(并且每次都是随机的),并且应该返回它。
这个想法是每当用户点击按钮获得一张独特的卡片,而不是再次获得同一张卡片时。 它有效但不完全 - 有时候,点击按钮后,用户什么也得不到,控制台中的消息是" 未捕获的TypeError:无法读取属性' background'未定义的 "。
欢迎任何建议。感谢。
这是我的代码:
var TarotContainer = [];
TarotContainer[0] = {name: "The Fool", background: "url('theFool.jpg')"}
TarotContainer[1] = {name: "The Magician", background: "url('theMagician.jpg')"}
TarotContainer[2] = {name: "The High Priestess", background: "url('theHighPriestess.jpg')"}
function getRandomTaroCard(){
var randomCard = Math.floor(Math.random() * TarotContainer.length);
var pickedRandomCard = TarotContainer.splice(randomCard, 1);
document.getElementById('card').style.backgroundImage = pickedRandomCard[randomCard].background;
document.getElementById('card').style.backgroundRepeat = "no-repeat";
}
答案 0 :(得分:2)
来自Mozilla Javascript Reference的Array.prototype.splice()返回:
包含已删除元素的数组。如果只有一个元素 删除后,返回一个元素的数组。如果没有元素 删除后,返回一个空数组。
这意味着您必须使用pickedRandomCard的第一个元素([0])。
像这样:
var TarotContainer = [];
TarotContainer[0] = {name: "The Fool", background: "url('theFool.jpg')"}
TarotContainer[1] = {name: "The Magician", background: "url('theMagician.jpg')"}
TarotContainer[2] = {name: "The High Priestess", background: "url('theHighPriestess.jpg')"}
function getRandomTaroCard(){
var randomCard = Math.floor(Math.random() * TarotContainer.length);
var pickedRandomCard = TarotContainer.splice(randomCard, 1);
document.getElementById('card').style.backgroundImage = pickedRandomCard[0].background;
document.getElementById('card').style.backgroundRepeat = "no-repeat";