web-dev-qa-db-ja.com

プロパティ名の変数を使用してオブジェクトを作成する

オブジェクト作成のためにオブジェクトリテラルプロパティで変数名を使用することはまったく可能ですか?

function createJSON (propertyName){
    return { propertyName : "Value"};
}

var myObject = createJSON("myProperty");

console.log(myObject.popertyName);  // prints "value"
console.log(myObject.myProperty);  // Does not exist
77
balafi

プロパティ名に変数を使用する場合は、 Computed Property Names を使用できます。変数名を角括弧の間に配置します。

var foo = "bar";
var ob  = { [foo]: "something" }; // ob.bar === "something"

Internet Explorerのサポートが必要な場合は、ES5アプローチを使用する必要があります(上記のように最新の構文を記述し、 Babel を適用することで取得できます) :

最初にオブジェクトを作成してから、 角括弧表記法 を使用してプロパティを追加します。

var foo = "bar";
var ob  = {};
ob[foo] = "something"; // === ob.bar = "something"

JSONをプログラムで作成する場合は、オブジェクトをJSON形式に準拠した文字列にシリアル化する必要があります。例えばwith the JSON.stringify method

160
Quentin

ES6では計算されたプロパティ名が導入されているため、

function CreateJSON (propertyName){
    var myObject = { [propertyName] : "Value"};
}

現在、ブラウザのサポートはごくわずかです。

40
Oriol

これを並べ替えることができます:

  var myObject = {};
  CreateProp("myProperty","MyValue");

  function CreateProp(propertyName, propertyValue)
  {
      myObject[propertyName] = propertyValue;
      alert(myObject[propertyName]);  // prints "MyValue" 
  };

私はこの構文を自分自身でかなり好んでいます:

function jsonObject()
{
};
var myNoteObject = new jsonObject();

function SaveJsonObject()
{
    myNoteObject.Control = new jsonObject();
    myNoteObject.Control.Field1= "Fred";
    myNoteObject.Control.Field2= "Wilma";
    myNoteObject.Control.Field3= "Flintstone";
    myNoteObject.Control.Id= "1234";
    myNoteObject.Other= new jsonObject();
    myNoteObject.Other.One="myone";
};

その後、次を使用できます。

SaveJsonObject();
var myNoteJSON = JSON.stringify(myNoteObject);

注:これは、ここからjson2.jsを使用します: http://www.json.org/js.html

7

適切な可能性のあるものの1つ(JSON機能は新しいブラウザーに共通であり、json2.jsは完全に有効なフォールバックです)は、JSON文字列を構築してから解析することです。

function func(prop, val) {
    var jsonStr = '{"'+prop+'":'+val+'}';
    return JSON.parse(jsonStr);
}

var testa = func("init", 1);
console.log(testa.init);//1

JSONプロパティ名は二重引用符で囲む必要があることに注意してください。

5
Chase