Utwórz obiekt używając zmiennych do nazwy właściwości [duplikat]

to pytanie ma już odpowiedzi tutaj : Jak używać zmiennej jako klucza w obiekcie JavaScript? (16 odpowiedzi) Zamknięty 5 lat temu .

Czy w ogóle można używać nazw zmiennych we właściwościach obiektowych do tworzenia obiektów?

Przykład

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
Author: Kajal Sinha, 2010-06-30

4 answers

Jeśli chcesz użyć zmiennej jako nazwy właściwości, możesz użyć obliczonych nazw właściwości. Umieść nazwę zmiennej między nawiasami kwadratowymi:

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

Jeśli chcesz mieć wsparcie dla Internet Explorera, musisz użyć podejścia ES5 (które możesz uzyskać pisząc nowoczesną składnię (jak wyżej), a następnie stosując Babel):

Najpierw Utwórz obiekt, a następnie dodaj właściwość za pomocą notacji nawiasu kwadratowego .

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

Jeśli chcesz programować Utwórz JSON, będziesz musiał serializować obiekt do ciągu zgodnego z formatem JSON. np. metodą JSON.stringify .

 201
Author: Quentin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-15 20:24:30

ES6 wprowadza obliczone nazwy właściwości, które pozwalają wykonać

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

Uwaga obsługa przeglądarki jest obecnie znikoma.

 46
Author: Oriol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-15 19:48:53

Możesz tak:

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

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

Sam o wiele udoskonaliłem tę składnię:

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

Następnie możesz użyć:

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

Uwaga: To wykorzystuje json2.js stąd: http://www.json.org/js.html

 9
Author: Mark Schultheiss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-01 20:19:38

Jedna rzecz, która może być odpowiednia (teraz, gdy funkcjonalność JSON jest wspólna dla nowszych przeglądarek, a json2.JS jest całkowicie poprawnym fallback), jest skonstruowanie ciągu JSON, a następnie parsować go.

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

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

Pamiętaj, że nazwy właściwości JSON muszą być zawarte w podwójnych cudzysłowach.

 6
Author: Chase,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-06 02:19:41