当前位置: 首页 > 知识库问答 >
问题:

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

壤驷鸿祯
2023-03-14

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

因此,我以三个对象作为数组的开始,并创建一个函数,该函数将通过单击按钮来调用。该函数创建2个变量-一个用于存储从Math.random()与数组长度的乘法中接收的随机数,并由Math.floor()取整。

第二个变量存储从数组中删除的一个项目(每次都是随机的),并且应该返回它。

这种想法是每当用户点击按钮获得一张独特的卡片时,就不能再获得相同的卡片。它可以工作,但不完全正确-有时,在单击按钮后,用户什么也得不到,控制台中的消息是“UncaughtTypeError:无法读取未定义的属性'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个答案

范霄
2023-03-14

从Mozilla Javascript参考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";   
 类似资料:
  • 问题内容: 我有以下数组,当我做得到: 我试图按如下方式访问数组: 但这显示了我: 未定义0 注意: 我从 Facebook SDK 4 获得此数组,所以我不知道原始的数组结构。 作为示例,如何访问数组中的值? 问题答案: 要访问或您如何使用两个不同的运算符。 数组 要访问数组元素,您必须使用,或者您不会看到太多,但也可以使用is 。 声明数组和访问数组元素之间的区别 定义数组和访问数组元素是两件

  • 问题内容: 我有以下JSON对象: 这是来自一个请求,我有成功。 问题是,即使dataJS在控制台中正确显示,我也无法访问JSON对象中的项目。有想法吗? 问题答案: 那是因为您的基础对象也是数组。 我怀疑那会有用

  • 问题内容: 做我的阵列我得到如下: 如何访问数组中的特定值?由于stdClass对象,以下代码不起作用 问题答案: 要访问数组成员,请使用 要访问对象成员,请使用 要访问对象数组内的对象成员: //获取数组中的第一个对象 //然后访问其键 您也可以像这样循环遍历一系列对象: 将数组视为事物的集合。这是一个袋子,您可以在其中存储您的东西,并给他们一个唯一的ID(密钥),然后使用该密钥访问它们(或将东

  • 问题内容: 我想遍历数组中包含的对象并更改每个对象的属性。如果我这样做: 控制台应该调出数组中的每个对象,对吗?但实际上,它仅显示第一个对象。如果我在循环外控制台记录阵列,则所有对象都会出现,因此肯定还有更多对象。 无论如何,这是下一个问题。如何使用循环访问数组中的Object1.x? 这将返回“未定义”。循环外的控制台日志再次告诉我,所有对象都具有“ x”的值。如何在循环中访问这些属性? 建议我

  • 问题内容: 我正在现有的代码库上工作,并获得了一个对象,该对象的属性以数字开头,可以看到是否调用了该对象。 假设是。当我尝试像这样访问它时,出现错误: 解析错误:语法错误,意外的T_LNUMBER,预期的T_STRING或T_VARIABLE或’{‘或’$’ 如何获得该属性? 问题答案: 那这个呢 : 实际上,您几乎可以对任何种类的变量执行此操作-即使对于不是类属性的变量也是如此。 例如,您可以考

  • 我有一个函数,它接受任意文件句柄,或者加载所有数据,或者如果对象支持随机访问,则允许延迟加载数据。 如何检查文件对象是否支持随机访问?