JavaScriptオブジェクトリテラルで変数キーを使用する方法はありますか?


82

私はこのようなコードを持っています。

var key = "anything";   
var object = {   
    key: "key attribute"  
};

それkeyを「何でも」に置き換える方法があるかどうか知りたいです。

お気に入り

var object = {  
    "anything": "key attribute"     
};

回答:


197

ES6では、計算されたプロパティ名を使用します

const key = "anything";   

const object = {   
    [key]: "key attribute"
//  ^^^^^  COMPUTED PROPERTY NAME
};

の周りの角括弧に注意してくださいkey。実際には、変数だけでなく、角括弧内の任意の式を指定できます。


5
クロームでも動作します。最も単純で最良の答え(y)
Anum Sheraz 2017

1
ES6の場合は問題ありませんが、古いバージョンについてはどうでしょうか(IE11は上記のコードでクラッシュします)
pascalzon 2018年

117

はい。次を使用できます。

var key = "anything";
var json = { };
json[key] = "key attribute";

または、プログラムの作成時に値が手元にある場合は、2番目の方法を使用します。


15

最新のJavascript(ECMAScript 6)では、変数を角かっこで囲むことができます。

var key = "anything";

var json = {
    [key]: "key attribute"
};

12

これでうまくいくはずです:

var key = "anything";

var json = {};

json[key] = "key attribute";

しかし、彼はこれをオブジェクトリテラルのコンテキストで実行したいと考えています。


-2

クロージャはこれに最適です。

function keyValue(key){
  return function(value){
    var object = {};
    object[key] = value;
    return object;
  }
}

var key = keyValue(key);
key(value);

クロージャは、ここで使用されるメカニズムにすぎません。コンセプトはHOFです。

1
HOF =高階関数。
リック

-2

最近、動的なjsonキー値を渡すCookieを設定する方法のソリューションが必要でした。https://github.com/js-cookie/js-cookie#jsonを使用すると、簡単に実行できます。ユーザーの選択された各オプション値をCookieに保存したかったので、タブまたはブラウザーがシャットダウンしても失われません。

var json = { 
        option_values : {}
    };
    $('option:selected').each(function(index, el) {
        var option = $(this);
        var optionText = option.text();
        var key = 'option_' + index;
        json.option_values[key] = optionText;
        Cookies.set('option_values', json, { expires: 7 } );
    }); 

次に、を使用して、各ページの読み込み時に各Cookieキー値を取得できます。

Cookies.getJSON('option_values');

-3

まあ、これを行うための「直接的な」方法はありません...

しかし、これはそれを行う必要があります:

json[key] = json.key;
json.key = undefined;

少し注意が必要ですが、うまくいきます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.