Como definir os valores de um objeto Javascript dinamicamente?

98

É difícil explicar o caso por palavras, deixe-me dar um exemplo:

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 ;)

Como posso definir uma propriedade de variável com valor de variável em um objeto JavaScript?

Umut KIRGÖZ
fonte
2
Dê uma olhada de perto. Parece que você apenas se esqueceu de ajustar o código do cour. Deve ser myObj[prop] = value;. eval('myObj.'+name)também não funciona porque a variável namenão existe.
Felix Kling
7
você realmente deve usar mais varteclados para declarar variáveis, usar mais pontos-e-vírgulas, não usar evale aceitar mais respostas. Feito.
jAndy
Sua pergunta é falho - que faz o trabalho, mas você cometeu um erro. Você escreveu " myObj[name]" quando tenho certeza de que pretendia escrever " myObj[prop]".
Ernest Friedman-Hill

Respostas:

151
myObj[prop] = value;

Isso deve funcionar. Você confundiu o nome da variável e seu valor. Mas indexar um objeto com strings para obter suas propriedades funciona bem em JavaScript.

Matt Greer
fonte
47
myObj.name=value

ou

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

Ambos são intercambiáveis.

Edit: eu estou supondo que você quis dizer myObj[prop] = value, em vez de myObj [nome] = valor. A segunda sintaxe funciona bem: http://jsfiddle.net/waitinforatrain/dNjvb/1/

Bcoughlan
fonte
1
Se a propriedade do objeto for uma palavra reservada, a segunda sintaxe será necessária.
timw4mail
Embora isso seja correto, não responde realmente à sua pergunta; ele está se perguntando o que fazer quando o nome da propriedade está em uma variável.
Ernest Friedman-Hill
Resposta atualizada aí, você tem nameonde deveriaprop
bcoughlan
5

Você pode obter a propriedade da mesma forma que a definiu.

foo = {
 bar: "value"
}

Você define o valor foo["bar"] = "baz";

Para obter o valor foo["bar"]

retornará "baz".

timw4mail
fonte
5

Você também pode criar algo que seja semelhante a um objeto de valor (vo);

SomeModelClassNameVO.js;

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

Do que você pode apenas fazer;

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

Ao criar um objeto myObjcomo você o criou , pense nele mais como um dicionário. Nesse caso, ele possui duas teclas name, e age.

Você pode acessar esses dicionários de duas maneiras:

  • Como uma matriz (por exemplo myObj[name]); ou
  • Como uma propriedade (por exemplo myObj.name); observe que algumas propriedades são reservadas, portanto, o primeiro método é o preferido.

Você deve ser capaz de acessá-lo como uma propriedade sem problemas. No entanto, para acessá-lo como um array, você precisará tratar a chave como uma string.

myObj["name"]

Caso contrário, o javascript assumirá que nameé uma variável e, como você não criou uma variável chamada name, ele não poderá acessar a chave que você espera.

NT3RP
fonte
1
Ainda há uma diferença entre myObj[name]e myObj.nameembora, porque o primeiro se refere a um nome de variável e o segundo a uma chave literal.
pimvdb
0

simples assim myObj.name = value;

Arturo Martinez
fonte