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?



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.


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/


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".


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

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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.