2010-09-12 145 views
11

基本上我有一個表格,其中<select>選擇使用哪組數據(值爲「m」,「f」和「c」)。然後我有一個在數據字典/對象:在JavaScript中獲取對象的屬性

var gdas = { 
    // Male 
    "m": { 
     "calories": 2500, 
     "protein": 55, 
     "carbohydrates": 300, 
     "sugars": 120, 
     "fat": 95, 
     "saturates": 30, 
     "fibre": 24, 
     "salt": 6 
    }, 

    // Female 
    "f": { 
     "calories": 2000, 
     // etc. 
}; 

現在我需要得到gdas.m/gdas.f/gdas.c但我不知道如何使用語法 - 我已經試過:

var mode = $("#mode").val(); 
var gda_set = gdas.mode; 
var gda_set = gdas[mode]; 

什麼是正確的語法/方法呢?

+0

[將屬性賦值給使用另一個對象屬性值作爲屬性名稱的屬性](http://stackoverflow.com/questions/2792936/assigning-property-to-js-object-using-another-objects -property-value-as-the-prope) – 2010-09-12 14:52:51

+1

'gdas [mode]'應該可以工作 – 2010-09-12 14:53:15

回答

17

由於您通過變量引用屬性,因此需要括號表示法。

var gda_set = gdas[mode]; 

...這就是如果你傳遞一個字符串,你會使用相同的符號。

var gda_set = gdas["f"]; 
+0

你說得對,我有點困惑,爲什麼第一次不工作,可能是我的錯誤點在錯誤的地方。謝謝! – Ross 2010-09-12 15:00:12

+0

@Ross - 不客氣。 :o)一個相當常見的錯誤是在前括號之前放置'.',如'gdas。[mode]'。無論如何,很高興你的工作! – user113716 2010-09-12 15:02:58

2

您在該變量中沒有「模式」屬性。您必須使用if來檢測您正在處理的性別,並獲得gdas.m.fibregdas.f.salt

+2

這不是他的問題,是嗎?他需要了解他如何根據選定的值設置「.m.」和「.f.」動態 – 2010-09-12 14:56:52

0

您可以使用gdas [mode],它選擇通過mode的值進行索引的元素。