動的キーを持つオブジェクトの作成 [重複] 質問する

動的キーを持つオブジェクトの作成 [重複] 質問する

まず、私はチェリオNode.js で DOM にアクセスして解析します。楽しい時間でした。

状況は次のとおりです:

オブジェクトを作成するために必要な関数があります。そのオブジェクトはキーと値の両方に変数を使用し、その単一のオブジェクトを返します。例:

stuff = function (thing, callback) {
  var inputs  = $('div.quantity > input').map(function(){
    var key   = this.attr('name')
     ,  value = this.attr('value');

     return { key : value }
  }) 

  callback(null, inputs);
}

出力は次のようになります:

[ { key: '1' }, { key: '1' } ]

(.map()参考までにオブジェクトの配列を返します)

key実際には からの文字列である必要がありますthis.attr('name')

私がやろうとしていることを考慮すると、Javascript で文字列をキーとして割り当てる最善の方法は何ですか?

ベストアンサー1

新しいES2015 標準JavaScript(以前はES6と呼ばれていました)では、計算されたキーを使用してオブジェクトを作成できます。オブジェクト初期化仕様

構文は次のとおりです。

var obj = {
  [myKey]: value,
}

OP のシナリオに適用すると、次のようになります。

stuff = function (thing, callback) {
  var inputs  = $('div.quantity > input').map(function(){
    return {
      [this.attr('name')]: this.attr('value'),
    };
  }) 

  callback(null, inputs);
}

注:トランスパイラは依然として必要ですブラウザの互換性

使用バベルまたはGoogleのトレーサー、 可能です今日この構文を使う


以前の JavaScript 仕様 (ES5 以前) では、オブジェクトリテラル内のキーは常に文字列として文字通り解釈されます。

「ダイナミック」キーを使用するには、括弧表記:

var obj = {};
obj[myKey] = value;

あなたの場合:

stuff = function (thing, callback) {
  var inputs  = $('div.quantity > input').map(function(){
    var key   = this.attr('name')
     ,  value = this.attr('value')
     ,  ret   = {};

     ret[key] = value;
     return ret;
  }) 

  callback(null, inputs);
}

おすすめ記事