Dalam JavaScript, saya telah membuat objek seperti ini:
var data = {
'PropertyA': 1,
'PropertyB': 2,
'PropertyC': 3
};
Apakah mungkin untuk menambahkan properti lebih lanjut ke objek ini setelah pembuatan awal jika nama properti tidak ditentukan sampai waktu berjalan? yaitu
var propName = 'Property' + someUserInput
//imagine someUserInput was 'Z', how can I now add a 'PropertyZ' property to
//my object?
javascript
Lee D
sumber
sumber
object["property"]
ini tidak persis sama denganarray[4]
, yang pertama tidak dibuat sebagai array yang benar.data["PropertyD"]
kedata[function_to_get_property_name()]
tampaknya sepele.ES6 untuk kemenangan!
Jika Anda log
data
Anda mendapatkan ini:Ini menggunakan sintaksis Properti Hitung dan Templat Literal baru .
sumber
obj[propname]
). Sebaliknya, saya bisa menggunakan ini dengan sintaks penyebaran objek.var a = {}; a["dynamic-" + prop] = true;
a
. (Khususnya ketika menggunakan paket seperti redux)Ya itu mungkin. Asumsi:
Antara:
atau
Metode pertama lebih disukai. eval () memiliki masalah keamanan yang jelas jika Anda menggunakan nilai yang disediakan oleh pengguna, jadi jangan menggunakannya jika Anda dapat menghindarinya, tetapi perlu diketahui bahwa ada dan apa yang dapat dilakukan.
Anda dapat merujuk ini dengan:
atau
atau
sumber
$("#mySelector").data("propertyname", myvalue);
to set, danvar myValue=$("#mySelector").data("propertyname");
untuk mendapatkan kembali nilainya. Bahkan objek kompleks (daftar, array ...) dapat ditambahkan dengan cara ini.Saya tahu bahwa pertanyaannya dijawab dengan sempurna, tetapi saya juga menemukan cara lain untuk menambahkan properti baru dan ingin membaginya dengan Anda:
Anda dapat menggunakan fungsi ini
Object.defineProperty()
Ditemukan di Jaringan Pengembang Mozilla
Contoh:
sumber
defineProperties
(jamak).Object.defineProperty
tidak dimaksudkan sebagai alat kenyamanan yang mudah, tetapi alat yang memiliki kontrol yang baik. Jika Anda tidak memerlukan kontrol tambahan itu, itu bukan alat yang tepat untuk memilih.Object.defineProperty(obj, prop, valueDescriptor)
jauh lebih lambat dan sulit bagi V8 untuk mengoptimalkan daripada sekadar melakukanobj[prop] = value
;ES6 memperkenalkan nama properti yang dihitung, yang memungkinkan Anda melakukannya
sumber
Di sini, menggunakan notasi Anda:
sumber
Anda dapat menambahkan lebih banyak properti yang Anda inginkan hanya dengan menggunakan notasi titik:
atau :
untuk tombol dinamis.
sumber
selain semua jawaban sebelumnya, dan jika Anda bertanya-tanya bagaimana kita akan menulis nama properti dinamis di Masa Depan menggunakan Nama Properti yang Dikomputasi (ECMAScript 6), berikut caranya:
referensi: Memahami ECMAScript 6 - Nickolas Zakas
sumber
Hanya tambahan jawaban abeing di atas. Anda dapat mendefinisikan fungsi untuk merangkum kompleksitas defineProperty seperti yang disebutkan di bawah ini.
referensi: http://addyosmani.com/resources/essentialjsdesignpatterns/book/#constructorpatternjavascript
sumber
Anda dapat menambahkan properti secara dinamis menggunakan beberapa opsi di bawah:
Dalam contoh Anda:
Anda bisa mendefinisikan properti dengan nilai dinamis dalam dua cara berikut:
atau
Terlebih lagi .. jika kunci Anda juga dinamis, Anda dapat mendefinisikan menggunakan kelas Object dengan:
di mana data adalah objek Anda, kunci adalah variabel untuk menyimpan nama dan nilai kunci adalah variabel untuk menyimpan nilai.
Saya harap ini membantu!
sumber
Saya tahu ada beberapa jawaban untuk posting ini, tapi saya belum melihat satu di mana ada beberapa properti dan mereka berada dalam array. Dan solusi ini adalah untuk ES6.
Sebagai ilustrasi, katakanlah kita memiliki array bernama orang dengan objek di dalamnya:
Jadi, Anda bisa menambahkan properti dengan nilai yang sesuai. Katakanlah kita ingin menambahkan Bahasa dengan nilai default EN .
Susunan Person sekarang akan menjadi seperti ini:
sumber
Person = Person.map(code here)
. Tetapi intinya adalah Anda dapat menambahkan properti ke objek yang ada dengan mudahES6
.Cara paling sederhana dan paling portabel adalah.
Berdasarkan jawaban #abeing!
sumber
Hati-hati saat menambahkan properti ke objek yang ada menggunakan metode. (Dot) .
(dot) metode menambahkan properti ke objek hanya boleh digunakan jika Anda tahu yang 'kunci' terlebih dahulu jika menggunakan [braket] metode.
Contoh:
Catat masalah di akhir log konsol - 'kunci: 1999' alih-alih Properti6: 6, Properti7: 7, ........., Property1999: 1999 . Jadi cara terbaik untuk menambahkan properti yang dibuat secara dinamis adalah metode [braket].
sumber
Cara yang bagus untuk mengakses dari nama string dinamis yang berisi objek (misalnya object.subobject.property)
Contoh:
eval bekerja untuk nilai baca, tetapi nilai tulis sedikit lebih sulit.
Versi yang lebih maju (Buat subclass jika tidak ada, dan memungkinkan objek alih-alih variabel global)
Contoh:
Ini sama dengan o.object.subobject.property
sumber
Inilah cara saya memecahkan masalah.
Menghasilkan objek berikut:
sumber
Ini dapat berguna jika campuran properti baru ditambahkan dalam runtime:
Namun, operator penyebaran menggunakan salinan dangkal tetapi di sini kami menetapkan data untuk dirinya sendiri sehingga harus kehilangan apa-apa
sumber
Cara mudah dan sempurna
Jika Anda ingin menerapkannya pada array data (versi ES6 / TS)
sumber
Pastinya. Anggap saja sebagai kamus atau array asosiatif. Anda dapat menambahkannya kapan saja.
sumber