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'}
  }
我认为这种结构是可以的,但可能有更好的方法

我试图通过此函数从此列表中创建一个仪器,其中param
addedInstrument
作为标签的同一字符串输入,因此
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的“关联数组”定义中那样“索引”。可能重复的