【问题标题】:Access a nested object using a variable value in Javascript在 Javascript 中使用变量值访问嵌套对象
【发布时间】:2016-05-20 18:51:06
【问题描述】:

我正在制作游戏。最终用户将在 12 个可用的战斗机中选择一个战斗机。假设他们选择了“Ryu”。但他们本可以选择“春丽”。玩家选择将存储在变量“selectedPlayer”中。现在我需要获取/访问与用户选择匹配的对象(或其成员)。我尝试了多种方法,包括下面显示的方法,但我进入了控制台:“未捕获的 TypeError:无法读取未定义的属性 'Ryu'。”

var selectedPlayer = "Ryu";
var Slogan = players[selectedPlayer]['Slogan'];
console.log(Slogan);

var players = {
    Ryu:  {
        Name: "Ryu",
        Country: "Japan",
        Text: "The answer lies in the heart of battle.",
        smImg: "../images/small/ryu.png",
        lgImg: "../images/large/ryu.jpg",
        attack: [1,5,10,15,20,25]
    },
    ChunLi: {
        Name: "Chun Li",
        Country: "China",
        Slogan: "Want to see my Kung-Fu? I'll show you.",
        smImg: "../images/small/chunli.png",
        lgImg: "../images/large/chunli.jpg",
        attack: [1,4,11,15,21,25]
    }
}

我需要能够进入“玩家”对象并访问所选选手对象的成员。我可以写一堆 if 语句,但这不是很干净。我可以这样做吗?

var playerOne = {
    Name: players.<some variable>.Name,
    Country: players.<some variable>.Country,
    Slogan: players.<some variable>.Slogan,
    smImage: players.<some variable>.smImg,
    lgImage: players.<some variable>.lgImg,
    Attack: players.<some variable>.attack
};

var playerTwo = {
    Name: players.<some variable>.Name,
    Country: players.<some variable>.Country,
    Slogan: players.<some variable>.Slogan,
    smImage: players.<some variable>.smImg,
    lgImage: players.<some variable>.lgImg,
    Attack: players.<some variable>.attack
};

也许有不同的。我对任何运作良好的事情都持开放态度。谢谢。

【问题讨论】:

    标签: javascript object nested javascript-objects


    【解决方案1】:

    您需要在访问之前定义映射。另外,Ryu 似乎没有Slogan

    var players = {
        Ryu:  {
            Name: "Ryu",
            Country: "Japan",
            // Shoudldn't this be "Slogan"?
            Text: "The answer lies in the heart of battle.",
            smImg: "../images/small/ryu.png",
            lgImg: "../images/large/ryu.jpg",
            attack: [1,5,10,15,20,25]
        },
        ChunLi: {
            Name: "Chun Li",
            Country: "China",
            Slogan: "Want to see my Kung-Fu? I'll show you.",
            smImg: "../images/small/chunli.png",
            lgImg: "../images/large/chunli.jpg",
            attack: [1,4,11,15,21,25]
        }
    }
    
    var selectedPlayer = "Ryu";
    var Slogan = players[selectedPlayer]['Slogan']; 
    console.log(Slogan);
    

    【讨论】:

    • 谢谢,我可以让它工作了。 Ryu 口号是我在将成员名称从“文本”更改为“口号”时修正的错字。不过很好。
    【解决方案2】:

    您的错误是因为您在定义之前引用了players。试试这个:

    var players = {
        Ryu:  {
            Name: "Ryu",
            Country: "Japan",
            Text: "The answer lies in the heart of battle.",
            smImg: "../images/small/ryu.png",
            lgImg: "../images/large/ryu.jpg",
            attack: [1,5,10,15,20,25]
        },
        ChunLi: {
            Name: "Chun Li",
            Country: "China",
            Slogan: "Want to see my Kung-Fu? I'll show you.",
            smImg: "../images/small/chunli.png",
            lgImg: "../images/large/chunli.jpg",
            attack: [1,4,11,15,21,25]
        }
    }
    
    var selectedPlayer = "Ryu";
    var Slogan = players[selectedPlayer]['Slogan'];
    console.log(Slogan);
    

    【讨论】:

    • 谢谢。我在发布问题后不久就意识到了我的错误。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 2020-03-14
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多