2013-07-04 36 views
0

我有相聯繫的數組:訪問對象值的關聯數組值

instrumentLookup: { 
    hh: {label: 'Hi Hat', type: 'hh'}, 
    kd: {label: 'Kick Drum', type: 'kd'}, 
    o1: {label: 'other1', type: 'o1'}, 
    o2: {label: 'other2', type: 'o2'} 
    } 

我認爲這個結構確定,但有可能是一個更好的辦法。

我想這個功能,在帕拉姆addedInstrument就會出現,相同的字符串作爲標籤,所以hh,​​,o1創建從該列表的工具,....:

addInstrument: function(addedIntrument) { 
    console.warn(addedIntrument); 
    var newLabel = this.defaults.instrumentLookup.addedIntrument.label; 
    var newType = addedIntrument; 
    console.warn(newLabel + ' ' + newType) 
    // push it to the list 
    // this.unusedInstruments.push({label:newLabel, type:newType}); 
} 

有這幾個問題,隨時回答任何或全部或建議的替代:

  • 如何訪問對象屬性當對象是關聯數組的值?
  • 我應該將其更改爲來自Associate數組的嵌套對象{type:{other attrs}}的數組[]嗎?
+1

記住JavaScript對象是真正的[關聯數組](http://en.wikipedia.org/wiki/Associative_array)和屬性(即採取字符串作爲鍵如地圖)不是「索引」,如PHP的「關聯數組」的定義。 – Paul

+0

[動態對象屬性名稱](http://stackoverflow.com/questions/4244896/dynamic-object-property-name) –

回答

2

如何訪問對象屬性當對象是關聯數組的值?

這很容易。你可以這樣做:console.log(instrumentLookup.hh.label); //Hi Hat

console.log(instrumentLookup.hh['label']); //Hi Hat

我應該將其更改爲[]數組嵌套對象:從關聯數組{{類型其他ATTRS}}?

如果您需要數組行爲,則應使用數組。

從評論:

那麼爲什麼不instrumentLookup.addedIntrument.label工作?

addedInstrument不是instrumentLookup一員,所以你不能使用.訪問它(這將是不確定的)。相反,你需要做的:instrumentLookup[addedInstrument]

我認爲這個結構確定,但有可能是一個更好的辦法。

您已經由type參數存儲每個樂器,爲什麼重複它的對象裏面?除非你有不止類型和標籤,可以通過進一步簡化這個:

var instrumentLookup = { hh: 'High Hat', 
         kd: 'Kick Drum', 
         o1: 'Other1', 
         o2: 'Other2'} 

和重寫你的addInstrument方法:

addInstrument: function(addedInstrument) { 
    console.warn(addedIntrument); 
    var inst = this.defaults.instrumentLookcup[addedInstrument]; 
    if(inst) { 
    this.unusedInstruments.push({label:inst, type:addedInstrument}); 
    } 
} 
+0

可能的重複,那麼爲什麼'instrumentLookup.addedIntrument.label'沒有工作? –

3

您需要括號符號動態地訪問屬性名稱。

instrumentLookup[ addedIntrument ].label