recorrer objetos objeto new eliminar elemento crear buscar array agregar javascript properties object

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í?



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?