Dari pos:
Mengirim array JSON untuk diterima sebagai Kamus <string, string>
Saya mencoba melakukan hal yang sama dengan posting itu. Satu-satunya masalah adalah bahwa saya tidak tahu apa kunci dan nilainya dimuka. Jadi saya harus bisa menambahkan pasangan kunci dan nilai secara dinamis dan saya tidak tahu bagaimana melakukannya.
Adakah yang tahu cara membuat objek itu dan menambahkan pasangan nilai kunci secara dinamis?
Saya sudah mencoba:
var vars = [{key:"key", value:"value"}];
vars[0].key = "newkey";
vars[0].value = "newvalue";
Tapi itu tidak berhasil.
javascript
dictionary
key-value
KenEucker
sumber
sumber
list = [["key1","value1"],["key2","value2"]]
. Beberapa bahasa lain memiliki tipe "pair", atau "tuple". tldr untuk dict aktual menambahkan:dict['key'] = "value"
Jawaban:
Pada dasarnya, Anda membuat objek literal dengan 2 properti (dipanggil
key
danvalue
) dan memasukkannya (menggunakanpush()
) ke dalam array.Sunting: Jadi hampir 5 tahun kemudian, jawaban ini semakin menurun karena tidak membuat literal objek JS "normal" (alias peta, alias hash, alias kamus).
Hal ini namun menciptakan struktur yang OP meminta (dan yang diilustrasikan pada pertanyaan lain yang terhubung ke), yang merupakan array literal objek , masing-masing dengan
key
danvalue
sifat. Jangan tanya saya mengapa struktur itu diperlukan, tapi itu yang diminta.Tapi, tetapi, jika apa yang Anda inginkan dalam objek JS sederhana - dan bukan struktur yang diminta OP - lihat jawaban tcll , meskipun notasi braket sedikit rumit jika Anda hanya memiliki kunci sederhana yang merupakan nama JS yang valid. Anda bisa melakukan ini:
Atau gunakan notasi titik biasa untuk mengatur properti setelah membuat objek:
Anda tidak ingin notasi braket jika Anda punya kunci yang memiliki ruang di dalamnya, karakter khusus, atau hal-hal seperti itu. Misalnya:
Anda juga ingin notasi braket jika kunci Anda dinamis:
Perhatikan bahwa kunci (nama properti) selalu berupa string, dan nilai non-string akan dipaksa ke string saat digunakan sebagai kunci. Misalnya
Date
objek dikonversi ke representasi stringnya:Perhatikan bahwa ini tidak selalu "hanya berfungsi", karena banyak objek akan memiliki representasi string seperti
"[object Object]"
yang tidak membuat kunci non-unik. Jadi berhati-hatilah terhadap sesuatu seperti:Meskipun
objA
danobjB
menjadi elemen yang sama sekali berbeda dan unik, mereka berdua memiliki representasi string dasar yang sama:"[object Object]"
.Alasannya
Date
tidak berperilaku seperti ini adalah bahwaDate
prototipe memilikitoString
metode kustom yang mengesampingkan representasi string default. Dan Anda dapat melakukan hal yang sama:(Perhatikan bahwa karena di atas menggunakan angka acak , tabrakan nama masih dapat terjadi dengan sangat mudah. Hanya untuk menggambarkan implementasi dari
toString
.)Jadi ketika mencoba menggunakan objek sebagai kunci, JS akan menggunakan
toString
implementasi objek itu sendiri , jika ada, atau menggunakan representasi string default.sumber
dict
bukan kamus asosiatif. Ini adalah array objek, yang masing-masing sedikit seperti kamus dengan dua tombol: "kunci" dan "nilai".bekerja seperti python :)
output konsol:
sumber
{}
daripada kurungSesederhana:
atau
kemudian
sumber
Karena Anda telah menyatakan bahwa Anda menginginkan objek kamus (dan bukan array seperti yang saya asumsikan dipahami), saya pikir inilah yang Anda cari:
sumber
JavaScript ini
Object
adalah dalam dirinya sendiri seperti kamus. Tidak perlu menemukan kembali roda.Biola
sumber
Anda dapat menggunakan peta dengan
Map
, seperti ini:sumber
Saya kebetulan berjalan di pertanyaan ini mencari sesuatu yang serupa. Itu memberi saya info yang cukup untuk menjalankan tes untuk mendapatkan jawaban yang saya inginkan. Jadi, jika ada orang lain yang ingin tahu cara menambahkan secara dinamis atau mencari pasangan {key: 'value'} dalam objek JavaScript, tes ini akan memberi tahu Anda semua yang mungkin perlu Anda ketahui.
keluaran
sumber
sumber
key1 = dictionary.key1
daripada indekskey1 = dictionary["key1"]
Anda bisa membuat Kamus kelas sehingga Anda dapat berinteraksi dengan daftar Kamus dengan mudah:
sumber
bagaimana dengan satu liner untuk membuat pasangan nilai kunci?
dan beberapa fungsi iterator ingin
reduce
secara dinamis mengubah array ke kamussumber
Dalam javascript modern (ES6 / ES2015), seseorang harus menggunakan struktur data Peta untuk kamus. Struktur data Peta di ES6 memungkinkan Anda menggunakan nilai arbitrer sebagai kunci.
Di Anda masih menggunakan ES5, cara yang benar untuk membuat kamus adalah membuat objek tanpa prototipe dengan cara berikut.
Ada banyak keuntungan membuat kamus tanpa objek prototipe. Blog di bawah ini layak dibaca tentang topik ini.
pola-dikt
objek-sebagai-peta
sumber
Ini akan membantu satu ton untuk mengetahui apa hasil akhir yang Anda inginkan, tetapi saya pikir inilah yang Anda inginkan:
sumber
Saya mengalami masalah ini .. tetapi dalam for loop. Solusi teratas tidak berfungsi (ketika menggunakan variabel (dan bukan string) untuk parameter fungsi push), dan yang lainnya tidak memperhitungkan nilai kunci berdasarkan variabel. Saya terkejut pendekatan ini (yang umum di php) bekerja ..
sumber
Perbaikan
var dict = {}
adalah menggunakanvar dict = Object.create(null)
.Ini akan membuat objek kosong yang tidak memiliki
Object.prototype
prototipe seperti itu.sumber
sumber