【问题标题】:In Javascript, how do you access key value data from an object in a mixed array?在 Javascript 中,如何从混合数组中的对象访问键值数据?
【发布时间】:2013-04-25 03:24:16
【问题描述】:

我叫迈克,我的问题有两个:

  1. 如何访问数组中的对象,以便它们正确显示在我的question 提示符中,以及
  2. 如何在if/else 语句中访问随机选择对象的属性?

我正在尝试制作一个简单的抽认卡程序来帮助我记住不同种类的音响设备。设备列表很大,但我只包括三种不同的设备以使这个示例保持简单。我希望每个对象都有两个属性:answerdesc。第一部分定义了三个对象,将它们放置在一个数组中,创建一个用于随机选择其中一个数组项的变量,以及另一个用于提示用户输入answer 的变量:

var newFlash = function() {
    var A827 = {
        answer: "T",
        desc: "Multitrack Tape Recorder"
    };
    var LA2A = {
        answer: "O",
        desc: "Classic Leveling Amplifier"
    };
    var SonyC800G = {
        answer: "M",
        desc: "Tube Condenser Microphone"
    };
    var list = [A827, LA2A, SonyC800G];
    var rand = Math.floor(Math.random() * list.length);
    var question = prompt("What kind of equipment is " + list[rand] + "?");
};

现在,如果我将数组中的三个项目全部设为字符串,它们在question 提示中显示没有问题,正确地将list[rand] 替换为适当的数组项目。但是,在我的数组中使用对象时,我的提示是"What kind of equipment is [object Object]?

我的最终目标是让用户输入适当的一或两个字母的响应(M 代表麦克风,C 代表控制台,O 代表 Outboard Gear,T 代表磁带机,S 代表软件,CH 代表计算机硬件)在输入成功的字母时会产生一个警报,显示对象的answerdesc。我的 n00b 直觉告诉我,第二部分应该是 if/else 形式的声明

if (question == list[rand.answer]) {
    alert("Correct, Answer: " + list[rand.answer] + ", a " + list[rand.desc] + "!");
}
else {
    alert("Wrong, try again.");
}

但我很确定这不是访问这些对象属性的正确方法。

所以,我的问题有两个部分:

  1. 如何访问数组中的对象,以便它们正确显示在我的question 提示符中,以及
  2. 如何在if/else 语句中访问随机选择对象的属性?

我确信某些逻辑正在逃避我。谢谢阅读。

【问题讨论】:

    标签: javascript arrays object properties key-value


    【解决方案1】:

    您想使用var question = prompt("What kind of equipment is " + list[rand].desc + "?");list[rand] 将生成一个具有{answer: "", desc: ""} 结构的对象,因此您需要额外访问代码中的描述。

    同样,你想要:

    if (question == list[rand].answer) {
        alert("Correct, Answer: " + list[rand].answer + ", a " + list[rand].desc + "!");
    }
    else {
        alert("Wrong, try again.");
    }
    

    【讨论】:

      【解决方案2】:

      要在 Javascript 中访问对象的属性,请使用点表示法,这在许多具有对象的语言中很常见。 list 是一个对象数组,因此当您键入 list[rand] 时,您将返回其中一个对象。一旦你有了一个对象,你只需要使用点符号来访问你需要的任何属性,在这种情况下是descanswer

      所以不是

      var question = prompt("What kind of equipment is " + list[rand] + "?");

      试试

      var question = prompt("What kind of equipment is " + list[rand].desc + "?");

      将您尝试访问的属性放在括号外。这也解决了您的第二个问题,只需更改:

      if (question == list[rand.answer]) {
          alert("Correct, Answer: " + list[rand.answer] + ", a " + list[rand.desc] + "!");
      

      到:

      if (question == list[rand].answer) {
          alert("Correct, Answer: " + list[rand].answer + ", a " + list[rand].desc + "!");
      

      this fiddle 将帮助演示。

      【讨论】:

        猜你喜欢
        • 2013-09-07
        • 1970-01-01
        • 2021-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多