2017-01-03 6 views
0

さて、このタイトルは間違っているかもしれませんが、この質問をする方法はわかりません。私はDiscord.jsを使ってボットを書いています。与えられたメッセージに基づいて列挙から文字列を返す。ここで関数名(Javascript)として文字列を使用する

const Heroes = { 
VengefulSpirit: { 
inCaptainsMode: true, 
primaryAttribute:'Agility', 
    attributeGains:{ 
    Strength: 2.6, 
    Agility: 3.3, 
    Intelligence: 1.5 
    }, 

}, 
} 

このシナリオでは、それはVengefulSpiritされますので、入力

case 'venge': case 'vengeful spirit': case 'Vengeful Spirit': 
message.reply(getHeroDetails('VengefulSpirit')); 

そして悲しげに動作していない出力

function getHeroDetails(heroName){ 
var heroDetails = ''; 
heroDetails += 'Primary Attribute: '; 
heroDetails += Heroes.heroName.primaryAttribute.toString(); 
heroDetails += '\n In captain\'s mode: '; 
heroDetails += Heroes.heroName.inCaptainsMode.toString(); 
heroDetails += '\n Strength gain: '; 
heroDetails += Heroes.heroName.attributeGains.Strength.toString(); 
heroDetails += '\n Agility gain: '; 
heroDetails += Heroes.heroName.attributeGains.Agility.toString(); 
heroDetails += '\n Intelligence gain: '; 
heroDetails += Heroes.heroName.attributeGains.Intelligence.toString(); 
return heroDetails; 
} 

は今、私は入力文字列としてheroNameを使用していて、これらの呼び出しでheroNameを置き換えて使用すると、関数は正常に動作します。私はちょうどすべてのヒーロー(それらの112のような)のための関数をハードコーディングする代わりに、heroNameを使用する方法を知りません。私はそれがより短くなるように動的関数を作成しようとしています。

答えて

2

Heroesのキーにの代わりにアクセスするには、Heroes[heroName]を使用してください。

2

使用:Heroes[heroName]。ドット表記はこのような状況では機能しません... あなたのRPGでうまくいく;)

+0

ありがとうございました!これは働いた – Infinite

関連する問題