objetos - ¿Cómo crear una propiedad de objeto a partir de un valor variable en JavaScript?
recorrer array de objetos javascript (9)
Ahí está la notación de puntos y la notación de corchete
myObj[a] = b;
Esta pregunta ya tiene una respuesta aquí:
Quiero agregar una nueva propiedad a ''myObj'', nombrarla ''string1'' y darle un valor de ''string2'', pero cuando lo hago, devuelve ''undefined:
var myObj = new Object;
var a = ''string1'';
var b = ''string2'';
myObj.a = b;
alert(myObj.string1); //Returns ''undefined''
alert(myObj.a); //Returns ''string2''
En otras palabras: ¿Cómo creo una propiedad de objeto y le doy el nombre almacenado en la variable, pero no el nombre de la variable en sí?
Como $ scope es un objeto, puedes probar con JavaScript de la siguiente manera:
$scope[''something''] = ''hey''
Es igual a:
$scope.something = ''hey''
ECU, si haces myObj.a
, busca la propiedad llamada a myObj. Si haces myObj[a] =b
, busca la propiedad a.valueOf()
de myObj.
ES6 introduce nombres de propiedades computados, que le permiten hacer
var myObj = {[a]: b};
Tenga en cuenta que el soporte del navegador es actualmente despreciable.
La notación de puntos y las propiedades son equivalentes. Así lo lograrías así:
var myObj = new Object;
var a = ''string1'';
myObj[a] = ''whatever'';
alert(myObj.string1)
(alerta "lo que sea")
Lo siguiente demuestra un enfoque alternativo para devolver un objeto de par de claves utilizando la forma de (a, b)
. El primer ejemplo utiliza la cadena ''key''
como nombre de propiedad y ''val''
como valor.
Ejemplo 1:
(function(o,a,b){return o[a]=b,o})({},''key'',''val'');
Ejemplo: # 2:
var obj = { foo: ''bar'' };
(function(o,a,b){return o[a]=b,o})(obj,''key'',''val'');
Como se muestra en el segundo ejemplo, esto también puede modificar los objetos existentes (si la propiedad ya está definida en el objeto, el valor se sobrescribirá) .
Resultado # 1:
{ key: ''val'' }
Resultado # 2:
{ foo: ''bar'', key: ''val'' }
No puede usar una variable para acceder a una propiedad a través de la notación de puntos, en su lugar use la notación de matriz.
var obj= {
''name'' : ''jroi''
};
var a = ''name'';
alert(obj.a); //will not work
alert(obj[a]); //should work and alert jroi''
Podrías usar esto:
function createObject(propName, propValue){
this[propName] = propValue;
}
var myObj1 = new createObject(''string1'',''string2'');
Cualquier cosa que pase como primer parámetro será el nombre de la propiedad, y el segundo parámetro es el valor de la propiedad.
Un trazador de líneas:
obj = (function(attr, val){ var a = {}; a[attr]=val; return a; })(''hash'', 5);
O:
attr = ''hash'';
val = 5;
var obj = (obj={}, obj[attr]=val, obj);
¿Algo más corto?