2017-07-22 8 views
1

このようにネストされたアイテムがいくつかあります。ネストされた要素にアクセスする方法

grindstone:{ 
    1:{ 
    range: { 
    0: {min: 80 , max: 120}, 
    1: {min: 100, max: 200}, 
    2: {min: 180, max: 250}, 
    3: {min: 230, max: 450}, 
    4: {min: 430, max: 550} 
    } 
}, 

...

その後、同じファイルで、私はそれを呼び出して、それはのようなものになります。

grindVals(craft_id) { 
var map = {}; 
var grind = this.rune; 
var typeNumber = Number(craft_id.toString().slice(-4, -2)) 
if(typeNumber < 10){ 
    typeNumber = Number (typeNumber.toString().slice(1)); 
} 
map.set = grind.sets[Number(craft_id.toString().slice(0, -4))]; 
map.grade = grind.quality[Number(craft_id.toString().slice(-1))]; 
map.type = grind.effectTypes [typeNumber]; 
console.log("this.grindstone[" + typeNumber + "][" + Number(craft_id.toString().slice(-1))+ "].min"); 

--->Error Happens here 
map.min = this.grindstone[typeNumber][Number(craft_id.toString().slice(-1))].min; 
map.max = this.grindstone[typeNumber][Number(craft_id.toString().slice(-1))].max; 
return map; 
}, 

出力のようなものです:

これを。砥石[1] [2] .min

エラーの行に沿ってエラーが返されます。[2]と[いいえ。

私はここで間違っていますか?あなたは(ドット表記)わたってるしきrangeプロパティにアクセスする必要が

+0

メインオブジェクトには1つのアイテムしかなく、そのアイテムには1つのアイテムしかありません。良いことは、インデックス名で子アイテムにアクセスできることです。 this.grindstone [1] [range] [x] – MJoraid

+0

@Joraid、あなたの場合、 'range'は' range = 'range''です。それ以外の場合は動作しません。 –

+0

@NinaScholzええ、絶対に正しい、それは文字列であり、変数ではありません。 – MJoraid

答えて

1

this.grindstone[typeNumber].range[Number(craft_id.toString().slice(-1))].min 
//       ^^^^^^ 

または(括弧表記)

this.grindstone[typeNumber]['range'][Number(craft_id.toString().slice(-1))].min 
//       ^^^^^^^^^ 

はもっとここにおよそproperty accessorsobject initializerをお読みください。

+0

私はこれをテストしています - その間に、私はJavaScriptのデータアクセスを少し読むことができる良いリソースがありますか?私は電子で書かれたオープンソースのアプリで働いています。それはJavaから引き継がれてきて私には全く感覚的ではありません。 –

+0

上記の2つのリンクを見ることができます。 msビジュアルスタジオのようなIDEを使用することをお勧めします。疑問がある場合は、常に*未定義*にアクセスできない場合は、プロパティへのアクセス権が必要です。この場合、実際の(不足している)プロパティの前に1つのプロパティだけを出力することができます。 –

+0

私は現時点でVSコードを使用していますが、コードが実行されるまではそれほど多くのことを与えているようには見えません。例外がスローされるときに、私のためにいくつかのアドオンがありますか? –

1

あなたはどちらかrangeプロパティにアクセスする必要があります。

this.grindstone[1].range[2] 

それとも、grindstoneオブジェクトで配列を使用することができます。

var grindstone = { 
    1 : [ 
     {min: 80 , max: 120}, 
     {min: 100, max: 200}, 
     {min: 180, max: 250}, 
     {min: 230, max: 450}, 
     {min: 430, max: 550} 
    ] 
} 

あなたは、この第二のアプローチを使用する場合は、あなたが書くことができます。

this.grindstone[1][2] 
関連する問題