在Javascript中,如何从混合数组中的对象访问键值数据?

在Javascript中,如何从混合数组中的对象访问键值数据?,javascript,arrays,object,properties,key-value,Javascript,Arrays,Object,Properties,Key Value,我叫迈克,我的问题有两个: 如何访问数组中的对象,使其正确显示在我的问题提示中,以及 如何访问if/else语句中随机选择的对象的属性 我正在尝试制作一个简单的抽认卡程序来帮助我记忆不同种类的音响设备。设备的清单很大,但我只列出了三种不同的设备来简化这个例子。我希望每个对象都有两个属性:answer和desc。第一部分定义三个对象,将它们放置在一个数组中,创建一个用于随机拾取其中一个数组项的变量,以及另一个用于提示用户回答的变量: var newFlash = function() {

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

  • 如何访问数组中的对象,使其正确显示在我的
    问题
    提示中,以及
  • 如何访问
    if/else
    语句中随机选择的对象的属性
  • 我正在尝试制作一个简单的抽认卡程序来帮助我记忆不同种类的音响设备。设备的清单很大,但我只列出了三种不同的设备来简化这个例子。我希望每个对象都有两个属性:
    answer
    desc
    。第一部分定义三个对象,将它们放置在一个数组中,创建一个用于随机拾取其中一个数组项的变量,以及另一个用于提示用户回答
    的变量:

    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] + "?");
    };
    
    现在,如果我将数组中的三个项目设置为所有字符串,那么它们将在
    问题
    提示中正确显示,并用适当的数组项目替换
    列表[rand]
    。但是,使用数组中的对象,我的提示符会显示“什么样的设备是[对象]?

    我的最终目标是让用户输入适当的一个或两个字母响应(M表示麦克风,C表示控制台,O表示外侧齿轮,T表示磁带机,S表示软件,CH表示计算机硬件),在输入成功字母后生成一个警报,同时显示对象的
    应答
    描述
    。我的n00b直觉告诉我,第二部分应该是一个
    if/else
    语句,格式为

    if (question == list[rand.answer]) {
        alert("Correct, Answer: " + list[rand.answer] + ", a " + list[rand.desc] + "!");
    }
    else {
        alert("Wrong, try again.");
    }
    
    但我非常确定这不是访问这些对象属性的正确方法

    因此,我的问题又分为两部分:

  • 如何访问数组中的对象,使其正确显示在我的
    问题
    提示中,以及
  • 如何访问
    if/else
    语句中随机选择的对象的属性

  • 我确信有一段逻辑让我无法理解。谢谢阅读。

    您想使用
    var question=prompt(“什么样的设备是“+list[rand].desc+”?”);
    list[rand]
    将生成一个结构为
    {答案:,描述:}的对象
    ,因此您需要额外访问代码中的描述

    同样,您需要:

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

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

    所以不是

    var-question=prompt(“什么类型的设备”+list[rand]+“?””);

    试一试

    var question=prompt(“什么类型的设备”+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 + "!");