javascript - objetos - crear objeto usando variables para nombre de propiedad
recorrer array de objetos javascript (4)
Si, en JavaScript, desea usar una variable para un nombre de propiedad, primero debe crear el objeto y luego asignar la propiedad usando la notación de corchetes .
var foo = "bar";
var ob = {};
ob[foo] = "something"; // === ob.bar = "something"
Si quisieras crear JSON programáticamente, tendrías que serializar el objeto a una cadena que se ajustara al formato JSON. por ejemplo, con el método stringify de la biblioteca JavaScript JSON en json.org
Esta pregunta ya tiene una respuesta aquí:
¿Es posible usar nombres de variables en propiedades de objetos literales para la creación de objetos?
Ejemplo
function createJSON (propertyName){
return { propertyName : "Value"};
}
var myObject = createJSON("myProperty");
console.log(myObject.popertyName); // prints "value"
console.log(myObject.myProperty); // Does not exist
Puedes hacer esto:
var myObject = {};
CreateProp("myProperty","MyValue");
function CreateProp(propertyName, propertyValue)
{
myObject[propertyName] = propertyValue;
alert(myObject[propertyName]); // prints "MyValue"
};
Sin embargo, prefiero esta sintaxis:
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";
};
Entonces puedes usar lo siguiente:
SaveJsonObject();
var myNoteJSON = JSON.stringify(myNoteObject);
NOTA: Esto hace uso de json2.js desde aquí: http://www.json.org/js.html
Una cosa que puede ser adecuada (ahora que la funcionalidad JSON es común para los navegadores más nuevos, y json2.js es una alternativa perfectamente válida), es construir una cadena JSON y luego analizarla.
function func(prop, val) {
var jsonStr = ''{"''+prop+''":''+val+''}'';
return JSON.parse(jsonStr);
}
var testa = func("init", 1);
console.log(testa.init);//1
Solo tenga en cuenta que los nombres de propiedad JSON deben estar entre comillas dobles.
ES6 introduce nombres de propiedades computados, que le permiten hacer
function CreateJSON (propertyName){
var myObject = { [propertyName] : "Value"};
}
Nota El soporte del navegador actualmente es insignificante.