我有一个关联数组:
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
,kd
,{{ 1}},....:
o1
这里有几个问题,随时回答任何或所有问题或建议替代方案:
答案 0 :(得分:3)
您需要括号表示法来动态访问属性名称。
instrumentLookup[ addedIntrument ].label
答案 1 :(得分:2)
当Object是关联数组的值时,如何访问Object属性?
这很简单。你可以这样做:console.log(instrumentLookup.hh.label); //Hi Hat
或console.log(instrumentLookup.hh['label']); //Hi Hat
我应该从关联数组中将其更改为嵌套对象{type:{other attrs}}的数组[]吗?
如果需要数组行为,则应使用数组。
来自评论:
那么为什么没有instrumentLookup.addedIntrument.label工作?
addedInstrument
不是instrumentLookup
的成员,因此您无法使用.
来访问它(它将是未定义的)。相反,您需要执行:instrumentLookup[addedInstrument]
我认为这种结构还可以,但可能有更好的方法。
您已经按type
参数存储每个乐器,那么为什么要在对象内复制它?除非你不仅仅有Type和Label,否则你可以通过以下方式进一步简化:
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});
}
}