¿Cómo configurar dinámicamente los valores de un objeto Javascript?

98

Es difícil explicar el caso con palabras, déjame darte un ejemplo:

var myObj = {
    'name': 'Umut',
    'age' : 34
};

var prop = 'name';
var value = 'Onur';

myObj[name] = value; // This does not work

eval('myObj.' + name) = value;   //Bad coding ;)

¿Cómo puedo establecer una propiedad variable con un valor variable en un objeto JavaScript?

Umut KIRGÖZ
fuente
2
Eche un vistazo de cerca. Parece que se olvidó de ajustar el código de cour. Debería serlo myObj[prop] = value;. eval('myObj.'+name)tampoco funciona porque la variable nameno existe.
Felix Kling
7
Realmente debería usar más varteclados para declarar variables, usar más punto y coma, no usar evaly aceptar más respuestas. Hecho.
jAndy
Su pregunta es defectuoso - que hace el trabajo, pero cometió un error. Escribiste " myObj[name]" cuando estoy seguro de que querías escribir " myObj[prop]".
Ernest Friedman-Hill

Respuestas:

151
myObj[prop] = value;

Eso debería funcionar. Mezcló el nombre de la variable y su valor. Pero indexar un objeto con cadenas para obtener sus propiedades funciona bien en JavaScript.

Matt Greer
fuente
47
myObj.name=value

o

myObj['name']=value     (Quotes are required)

Ambos son intercambiables.

Editar: supongo que te myObj[prop] = valuerefieres a, en lugar de myObj [nombre] = valor. La segunda sintaxis funciona bien: http://jsfiddle.net/waitinforatrain/dNjvb/1/

bcoughlan
fuente
1
Si la propiedad del objeto es una palabra reservada, se requiere la segunda sintaxis.
timw4mail
Si bien esto es correcto, en realidad no responde a su pregunta; se pregunta qué hacer cuando el nombre de la propiedad está en una variable.
Ernest Friedman-Hill
Respuesta actualizada allí, tiene namedonde debería tenerprop
bcoughlan
5

Puede obtener la propiedad de la misma manera que la configuró.

foo = {
 bar: "value"
}

Tu pones el valor foo["bar"] = "baz";

Para obtener el valor foo["bar"]

devolverá "baz".

timw4mail
fuente
5

También puede crear algo que sea similar a un objeto de valor (vo);

SomeModelClassNameVO.js;

function SomeModelClassNameVO(name,id) {
    this.name = name;
    this.id = id;
}

De lo que puedes hacer;

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);
Soner Gönül
fuente
3

Cuando crea un objeto myObjcomo lo ha hecho, piense en él más como un diccionario. En este caso, tiene dos claves name, y age.

Puede acceder a estos diccionarios de dos formas:

  • Como una matriz (p myObj[name]. Ej. ); o
  • Como una propiedad (por ejemplo myObj.name); tenga en cuenta que algunas propiedades están reservadas, por lo que se prefiere el primer método.

Debería poder acceder a él como una propiedad sin ningún problema. Sin embargo, para acceder a él como una matriz, deberá tratar la clave como una cadena.

myObj["name"]

De lo contrario, javascript asumirá que namees una variable y, dado que no ha creado una variable llamada name, no podrá acceder a la clave que espera.

NT3RP
fuente
1
Todavía hay una diferencia entre myObj[name]y myObj.namesin embargo, porque el primero se refiere a un nombre de variable y el segundo a una clave literal.
pimvdb
0

tan simple como esto myObj.name = value;

Arturo Martinez
fuente