如何访问数组中随机对象的属性?

时间:2015-06-10 14:16:41

标签: javascript arrays random javascript-objects

我有一个对象数组。它们中的每一个都具有与其他属性相同的属性,但具有不同的值。我想访问这个数组中一个随机对象的属性,但只是一次 - 所以当我随机获得该对象时,它不再是在数组中。

因此,我只使用三个对象作为开头创建数组,并创建一个将通过单击按钮调用的函数。该函数创建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";                                                         

}

1 个答案:

答案 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";