100

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

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

var myObject = createJSON("myProperty");

console.log(myObject.propertyName);  // Prints "value"
console.log(myObject.myProperty);  // This property does not exist
4

4 に答える 4

226

プロパティ名に変数を使用する場合は、計算されたプロパティ名を使用できます。変数名を角かっこで囲みます。

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形式に準拠した文字列にシリアル化する必要があります。たとえばJSON.stringifyメソッドを使用します。

于 2010-06-30T22:51:38.920 に答える
49

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

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

ブラウザのサポートは現在無視できることに注意してください。

于 2014-08-15T19:48:53.207 に答える
9

あなたはこれを行うことができます:

  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

于 2010-07-01T20:19:38.480 に答える
6

適切な可能性のあるものの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プロパティ名は二重引用符で囲む必要があることに注意してください。

于 2012-01-06T02:19:41.683 に答える