使用 Javascript 中的变量值访问嵌套对象



我在做一个游戏。 最终用户将从 12 架可用战斗机中选择一架战斗机。 假设他们选择了"Ryu"。 但他们本可以选择"春丽"。 玩家选择将存储在变量"selectedPlayer"中。现在我需要获取/访问与用户选择匹配的对象(或其成员)。 我已经尝试了许多方法,包括如下所示的方法,但我进入控制台:"未捕获的类型错误:无法读取未定义的属性'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]
    }
}

我需要能够进入"玩家"对象并访问所选 fighers 对象的成员。 我可以写一堆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
};

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

您需要在访问映射之前定义映射。另外,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);

您的错误是因为您在定义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);

最新更新