2016-06-08 38 views
0

所以,我已經有了一個巨大數組是這樣的:多維名選擇

var enemy = { 
    'level1' : { 
     creature : 
     { 
      creature_name : { 
       'Goblin' : { 
        info: { 
         'c_name' : 'Goblin', 
         'HP' : '20', 
         'damage' : '3', 
         'loot' : [ 
          {name: 'a wooden sword' , item: 'weapon' , value: 2}, 
          {name: 'a golden necklace', item: 'amulet' , value: 1}, 
          {name: 'a pair of boots' , item: 'boots' , value: 1}, 
          {name: 'some cloth legs' , item: 'legs' , value: 3}, 
          {name: 'a cloth helmet' , item: 'helm' , value: 2} 
         ] 
        } 
       }, 
       'Cow' : { 
        info: { 
         'c_name' : 'Cow', 
         'HP' : '10', 
         'damage' : '1', 
         'loot' : [ 
          {name: 'a wooden sword' , item: 'weapon' , value: 2}, 
          {name: 'a golden necklace', item: 'amulet' , value: 1}, 
          {name: 'a pair of boots' , item: 'boots' , value: 1}, 
          {name: 'a cloth helmet' , item: 'helm' , value: 2} 
         ] 
        } 
       }, 
       'dragon' : { 
        info: { 
         'c_name' : 'Cow', 
         'HP' : '300', 
         'damage' : '300', 
         'loot' : [ 
          {name: 'an almighty dragon sword' , item: 'weapon' , value: 200}, 
          {name: 'a dragon tooth', item: 'amulet' , value: 30}, 
          {name: 'a pair of dragon boots' , item: 'boots' , value: 60}, 
          {name: 'a dragon helmet' , item: 'helm' , value: 60} 
         ] 
        } 
       }, 

      } 

     }, 
    }, 
    'level2' : { 
     'skelleton' : { 
      'HP' : '40', 
      'damage' : '5', 
      'loot' : [ 
       {name: 'a bone' , item: 'weapon' , value: 1}, 
       {name: 'a warriors helmet' , item: 'helm' , value: 4} 
      ] 
     } 
    } 

}; 

,當我選擇生物我想我需要調用它像這樣:

enemy.level1.creature.creature_name.dragon.info.c_name

現在我想能夠通過input box或類似的東西選擇一個敵人。 但我無法弄清楚如何中插入enemy.level1.creature.creature_name.dragon.info.c_name

該值我試着用enemy.level1.creature.creature_name.+ input_value + .info.c_name

但是,這似乎並沒有工作。必須是一個簡單的解決方案呢?

+2

'enemy.level1.creature.creature_name [input_value] .info.c_name' – Pointy

+0

謝謝!會嘗試一下:) – GetOn

+0

'enemy.level1.creature.creature_name [input_value] .info.c_name' – vaso123

回答

0

你有什麼是一個對象不是數組。您可以通過多種方式設置對象屬性。一種方法是這樣的:

var myObj = { 
    foo: { 
    value : "foo" 
    }, 
    bar: { 
    value: "bar" 
    } 
} 

myObj["foo"] = "123"; 

在你的情況,你的對象是更大的,但過程是相同的:

enemy.level1.creature.creature_name[input_value].info.c_name = "whatever name"; 

其中輸入值creature_name的有效屬性之一,即「龍」 :

enemy.level1.creature.creature_name["dragon"].info.c_name = "whatever name" 
+0

它不工作,它表示'Uncaught TypeError:無法讀取未定義的屬性'信息'。我想是因爲它是creature_name.'dragon'.info.c_name而不是creature_name [「'dragon'」]。info.c_name。任何幫助? – GetOn

+0

@GetOn你將不得不去掉字符串中的空格;沒有空格的屬性名稱「dragon」與具有空格的「dragon」不同。 – Pointy

+0

修剪您的值:var input_value =「dragon」;那麼enemy.level1.creature.creature_name [input_value.trim()]。info.c_name =「任何名稱」; – terpinmd

1

當使用變量名稱作爲散列元素時,要訪問而不是.dot表示法,可以使用[]表示法。

所以

enemy.level1.creature.creature_name[input_value].info.c_name 

應該給你你想要的東西。