2016-05-20 6 views
0

私はゲームを作っています。エンドユーザは、利用可能な12の戦闘機の中から戦闘機を選択します。彼らが「Ryu」を選んだとしよう。しかし彼らは「春里」を選ぶことができた。プレーヤーの選択は変数 'selectedPlayer'に保存されます。今は、ユーザーの選択に一致するオブジェクト(またはそのメンバー)を取得またはアクセスする必要があります。私は以下のような方法をいくつか試しましたが、コンソールに入っています: "Uncaught TypeError:未定義のプロパティ 'Ryu'を読み込めません。Javascriptの変数値を使用してネストされたオブジェクトにアクセスします。

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 
}; 

多分別のものがあります。私はうまくいくものにはオープンです。ありがとうございました。

答えて

3

アクセスする前にマッピングを定義する必要があります。さらに、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); 
+0

ありがとうございます、私はそれを動作させることができました。 Ryuのスローガンは、メンバー名を「テキスト」から「スローガン」に変更していたので修正したタイプミスです。しかし、良いキャッチ。 – jusrleb1

0

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); 
+0

ありがとうございます。質問を投稿した直後にエラーが発生しました。あなたのご意見ありがとうございます。 – jusrleb1

関連する問題