Bagaimana cara mengatur nilai objek Javascript secara dinamis?

98

Sulit untuk menjelaskan kasus per kata, izinkan saya memberi contoh:

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

Bagaimana cara menyetel properti variabel dengan nilai variabel di objek JavaScript?

Umut KIRGÖZ
sumber
2
Perhatikan baik-baik. Sepertinya Anda lupa menyesuaikan kode kursus. Seharusnya begitu myObj[prop] = value;. eval('myObj.'+name)tidak bekerja karena variabel nametidak ada.
Felix Kling
7
Anda benar-benar harus menggunakan lebih banyak varkeyboard untuk mendeklarasikan variabel, menggunakan lebih banyak titik koma, tidak menggunakan evaldan menerima lebih banyak jawaban. Selesai.
jAndy
Pertanyaan Anda cacat - yang tidak bekerja, tapi Anda membuat kesalahan. Anda menulis " myObj[name]" ketika saya yakin Anda bermaksud menulis " myObj[prop]".
Ernest Friedman-Hill

Jawaban:

151
myObj[prop] = value;

Seharusnya itu berhasil. Anda mencampurkan nama variabel dan nilainya. Tapi mengindeks objek dengan string untuk mendapatkan propertinya berfungsi dengan baik di JavaScript.

Matt Greer
sumber
47
myObj.name=value

atau

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

Keduanya dapat dipertukarkan.

Sunting: Saya rasa yang Anda maksud myObj[prop] = value, bukan myObj [name] = value. Sintaks kedua berfungsi dengan baik: http://jsfiddle.net/waitinforatrain/dNjvb/1/

bcoughlan.dll
sumber
1
Jika properti objek adalah kata yang dipesan, sintaks kedua diperlukan.
timw4mail
Meskipun ini benar, itu tidak benar-benar menjawab pertanyaannya; dia bertanya-tanya apa yang harus dilakukan ketika nama properti ada dalam variabel.
Ernest Friedman-Hill
Jawaban yang diperbarui di sana, Anda berada di nametempat yang seharusnyaprop
bcoughlan
5

Anda bisa mendapatkan properti dengan cara yang sama seperti yang Anda tetapkan.

foo = {
 bar: "value"
}

Anda mengatur nilainya foo["bar"] = "baz";

Untuk mendapatkan nilainya foo["bar"]

akan mengembalikan "baz".

timw4mail
sumber
5

Anda juga bisa membuat sesuatu yang mirip dengan objek nilai (vo);

SomeModelClassNameVO.js;

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

Dari yang bisa Anda lakukan;

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

Saat Anda membuat objek myObjseperti yang Anda miliki, anggaplah itu lebih seperti kamus. Dalam hal ini, ini memiliki dua kunci name,, dan age.

Anda dapat mengakses kamus ini dengan dua cara:

  • Seperti sebuah array (misalnya myObj[name]); atau
  • Seperti properti (misalnya myObj.name); perhatikan bahwa beberapa properti dicadangkan, jadi metode pertama lebih disukai.

Anda seharusnya dapat mengaksesnya sebagai properti tanpa masalah. Namun, untuk mengaksesnya sebagai array, Anda harus memperlakukan kunci tersebut seperti string.

myObj["name"]

Jika tidak, javascript akan menganggap itu namesebagai variabel, dan karena Anda belum membuat variabel yang dipanggil name, ia tidak akan dapat mengakses kunci yang Anda harapkan.

NT3RP
sumber
1
Masih ada perbedaan antara myObj[name]dan myObj.name, karena yang pertama mengacu pada nama variabel dan yang kedua mengacu pada kunci literal.
pimvdb
0

sesederhana ini myObj.name = value;

Arturo Martinez
sumber