4

人に関するデータのリストを含むマップ オブジェクトがあります。すべての人の名前は一意です。各人物のデータ フィールドには、同じ種類の情報が含まれていない場合があります (つまり、Joey には日付フィールドが含まれていますが、Jill には含まれていません)。

マップ パスの一部として変数名を使用して、マップの特定の部分にアクセスできるかどうか疑問に思っています。次の点を考慮してください。

var data = {
  'Joey': {
    'id': '912',
    'date': 'May 14 2012',
  },
  'Jill': {
    'id': '231',
    'login': 'JillM',
  }
}

var name="Joey";
var joeyDate = data. + name + .date; //This does not work. Is there an alternative?
4

2 に答える 2

8

次の構文を使用します。

data[name]["date"]

これは、の代替手段data.Joeyであり、これも機能するはずですが、静的です。

次のものも使用できます。

data[name].date

違いはまさにあなたが質問していることです-[]記法は動的検索に優れており、ドット表記を使用している場合はJavascriptでは許可されない可能性のある無効なキーです。たとえば、「date-born」のキーがある場合、は使用できませんがdata[name].date-born、は使用できますdata[name]["date-born"]

これを使用する例は次のとおりです。

for (name in data) {
    console.log(data[name].date);
}

ただし、もちろん、dateプロパティである必要があります(「ジル」用ではない場合)。そうでない場合undefinedは返されます。

于 2012-10-24T16:30:11.343 に答える
1

別の方法:mapName.get(keyName).propertyName

あなたの場合:data.get(name).date

于 2018-07-09T07:23:41.523 に答える