1. ホーム
  2. javascript

[解決済み] 動的なキーを持つオブジェクトの作成 [重複]。

2022-03-24 09:07:13

質問

まず最初に チェリオ 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で文字列をキーとして割り当てるには、私がやろうとしていることを考慮すると、どのような方法が一番良いのでしょうか?

どのように解決するのですか?

新しい 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のtraceur が可能です。 今日からこの構文で .


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

dynamic"キーを使用するためには ブラケット表記 :

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);
}