Jak dynamicznie ustawić wartości obiektu JavaScript?

98

Trudno to wyjaśnić słowami, podam przykład:

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

Jak ustawić właściwość zmiennej z wartością zmiennej w obiekcie JavaScript?

Umut KIRGÖZ
źródło
2
Przyjrzyj się uważnie. Wygląda na to, że zapomniałeś dostosować kod Cour. Tak powinno być myObj[prop] = value;. eval('myObj.'+name)nie działa również, ponieważ zmienna namenie istnieje.
Felix Kling
7
powinieneś używać większej liczby varklawiatur do deklarowania zmiennych, używać więcej średników, nie używać evali akceptować więcej odpowiedzi. Gotowe.
jAndy
Twoje pytanie jest błędne - to działa, ale popełniłeś błąd. Napisałeś „ myObj[name]”, kiedy jestem całkiem pewien, że chciałeś napisać „ myObj[prop]”.
Ernest Friedman-Hill

Odpowiedzi:

151
myObj[prop] = value;

To powinno działać. Pomieszałeś nazwę zmiennej i jej wartość. Ale indeksowanie obiektu z ciągami znaków w celu uzyskania jego właściwości działa dobrze w JavaScript.

Matt Greer
źródło
47
myObj.name=value

lub

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

Oba są wymienne.

Edycja: zgaduję, że miałeś na myśli myObj[prop] = value, zamiast myObj [nazwa] = wartość. Druga składnia działa dobrze: http://jsfiddle.net/waitinforatrain/dNjvb/1/

bcoughlan
źródło
1
Jeśli właściwość obiektu jest słowem zastrzeżonym, wymagana jest druga składnia.
timw4mail
Chociaż to prawda, tak naprawdę nie odpowiada na jego pytanie; zastanawia się, co zrobić, gdy nazwa właściwości znajduje się w zmiennej.
Ernest Friedman-Hill
Zaktualizowana odpowiedź tam, namegdzie powinieneś miećprop
bcoughlan
5

Możesz uzyskać tę właściwość w ten sam sposób, w jaki ją ustawiłeś.

foo = {
 bar: "value"
}

Ty ustawiasz wartość foo["bar"] = "baz";

Aby uzyskać wartość foo["bar"]

zwróci "baz".

timw4mail
źródło
5

Możesz także stworzyć coś, co byłoby podobne do obiektu wartości (vo);

SomeModelClassNameVO.js;

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

Niż możesz po prostu zrobić;

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);
Soner Gönül
źródło
3

Kiedy tworzysz obiekt myObjtaki, jaki masz, myśl o nim bardziej jak o słowniku. W tym przypadku ma dwa klucze name, i age.

Dostęp do tych słowników można uzyskać na dwa sposoby:

  • Jak tablica (np. myObj[name]); lub
  • Podobnie jak nieruchomość (np. myObj.name); zwróć uwagę, że niektóre właściwości są zarezerwowane, więc preferowana jest pierwsza metoda.

Powinieneś mieć dostęp do niego jako własności bez żadnych problemów. Jednak aby uzyskać do niego dostęp jako tablicę, musisz traktować klucz jak ciąg.

myObj["name"]

W przeciwnym razie javascript przyjmie, że namejest to zmienna, a ponieważ nie utworzyłeś zmiennej o nazwie name, nie będzie mógł uzyskać dostępu do oczekiwanego klucza.

NT3RP
źródło
1
Nadal istnieje różnica między myObj[name]a myObj.name, ponieważ pierwsza odnosi się do nazwy zmiennej, a druga do dosłownego klucza.
pimvdb
0

takie proste myObj.name = value;

Arturo Martinez
źródło