Как динамически установить значения объекта Javascript?


98

Сложно объяснить дело словами, приведу пример:

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

Как я могу установить свойство переменной со значением переменной в объекте JavaScript?



2
Присмотритесь. Похоже, вы просто забыли изменить код суда. Так и должно быть myObj[prop] = value;. eval('myObj.'+name)не работает, так как переменная nameне существует.
Felix Kling

7
вам действительно следует использовать больше varклавиатур для объявления переменных, использовать больше точек с запятой, а не использовать evalи принимать больше ответов. Готово.
jAndy

Ваш вопрос ошибочный - это работает, но вы допустили ошибку. Вы написали " myObj[name]", когда я совершенно уверен, что вы хотели написать " myObj[prop]".
Ernest Friedman-Hill

Ответы:


151
myObj[prop] = value;

Это должно сработать. Вы перепутали имя переменной и ее значение. Но индексация объекта с помощью строк для получения его свойств отлично работает в JavaScript.


47
myObj.name=value

или

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

Оба они взаимозаменяемы.

Изменить: я предполагаю, что вы имели в виду myObj[prop] = valueвместо myObj [name] = value. Второй синтаксис отлично работает: http://jsfiddle.net/waitinforatrain/dNjvb/1/


1
Если свойство объекта является зарезервированным словом, требуется второй синтаксис.
timw4mail

Хотя это правильно, на самом деле это не отвечает на его вопрос; ему интересно, что делать, если имя свойства находится в переменной.
Ernest Friedman-Hill

Обновленный ответ там, у вас есть то, что nameвам нужноprop
bcoughlan

5

Вы можете получить свойство так же, как вы его установили.

foo = {
 bar: "value"
}

Вы устанавливаете значение foo["bar"] = "baz";

Чтобы получить значение foo["bar"]

вернет "баз".


5

Вы также можете создать что-то похожее на объект значения (vo);

SomeModelClassNameVO.js;

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

Чем вы можете просто сделать;

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);

3

Когда вы создаете объект myObjкак есть, думайте о нем больше как о словаре. В этом случае у него есть две клавиши name, и age.

Вы можете получить доступ к этим словарям двумя способами:

  • Как массив (например myObj[name]); или
  • Как свойство (например myObj.name); Обратите внимание, что некоторые свойства зарезервированы, поэтому предпочтительнее использовать первый метод.

У вас должна быть возможность без проблем получить к нему доступ как к собственности. Однако, чтобы получить доступ к нему как к массиву, вам нужно рассматривать ключ как строку.

myObj["name"]

В противном случае javascript будет считать, что nameэто переменная, и поскольку вы не создали вызываемую переменную name, он не сможет получить доступ к ожидаемому ключу.


1
Там еще разница между myObj[name]и , myObj.nameхотя, потому что первый относится к имени переменной , а второй в буквальном ключе.
pimvdb

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.