Javascript 作为关联数组值访问对象值
我有一个关联数组:Javascript 作为关联数组值访问对象值,javascript,Javascript,我有一个关联数组: instrumentLookup: { hh: {label: 'Hi Hat', type: 'hh'}, kd: {label: 'Kick Drum', type: 'kd'}, o1: {label: 'other1', type: 'o1'}, o2: {label: 'other2', type: 'o2'} } 我认为这种结构是可以的,但可能有更好的方法 我试图通过此函数从此列表中创建一个仪器,其中paramaddedI
instrumentLookup: {
hh: {label: 'Hi Hat', type: 'hh'},
kd: {label: 'Kick Drum', type: 'kd'},
o1: {label: 'other1', type: 'o1'},
o2: {label: 'other2', type: 'o2'}
}
我认为这种结构是可以的,但可能有更好的方法
我试图通过此函数从此列表中创建一个仪器,其中paramaddedInstrument
作为标签的同一字符串输入,因此hh
,kd
,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});
}
这里有几个问题,请随意回答任何或所有问题,或提出其他建议:
- 当对象是关联数组的值时,如何访问对象属性
- 我是否应该将其从关联数组更改为嵌套对象{type:{other attrs}}的数组[]
console.log(instrumentLookup.hh.label)//Hi Hat
或者console.log(instrumentLookup.hh['label'])//Hi Hat
是否应将其从关联数组更改为嵌套对象{type:{other attrs}}的数组[]?
如果需要数组行为,应该使用数组
从评论中:
那么为什么instrumentLookup.AddedInstrument.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});
}
}
当对象是关联数组的值时,如何访问对象属性?
这很容易。您可以执行以下操作:console.log(instrumentLookup.hh.label)//Hi Hat
或者console.log(instrumentLookup.hh['label'])//Hi Hat
是否应将其从关联数组更改为嵌套对象{type:{other attrs}}的数组[]?
如果需要数组行为,应该使用数组
从评论中:
那么为什么instrumentLookup.AddedInstrument.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});
}
}
您需要使用括号表示法来动态访问属性名称
instrumentLookup[ addedIntrument ].label
您需要使用括号表示法来动态访问属性名称
instrumentLookup[ addedIntrument ].label
那么为什么
instrumentLookup.addedIntrument.label
不起作用呢?那么为什么instrumentLookup.addedIntrument.label
不起作用呢?请记住,JavaScript对象是真的(例如,以字符串为键的映射),属性并不像PHP的“关联数组”定义那样“索引”。可能重复的请记住JavaScript对象为true(例如,将字符串作为键的映射),并且属性没有像PHP的“关联数组”定义中那样“索引”。可能重复的