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、、、、....:kdo1

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 配列から入れ子になった object{type: {other attrs}} の array[] に変更する必要がありますか?
4

2 に答える 2

3

プロパティ名に動的にアクセスするには、ブラケット表記が必要です。

instrumentLookup[ addedIntrument ].label
于 2013-07-04T16:21:56.687 に答える
2

オブジェクトが連想配列の値である場合、オブジェクトのプロパティにどのようにアクセスしますか?

とても簡単です。できるよ:console.log(instrumentLookup.hh.label); //Hi Hat

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

Associate 配列から入れ子になった object{type: {other attrs}} の array[] に変更する必要がありますか?

配列の動作が必要な場合は、配列を使用する必要があります。

コメントから:

では、なぜ 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});
   }
}
于 2013-07-04T16:20:13.143 に答える