Saya perlu menyimpan beberapa statistik menggunakan JavaScript dengan cara seperti saya akan melakukannya di C #:
Dictionary<string, int> statistics;
statistics["Foo"] = 10;
statistics["Goo"] = statistics["Goo"] + 1;
statistics.Add("Zoo", 1);
Apakah ada Hashtable
sesuatu seperti Dictionary<TKey, TValue>
dalam JavaScript?
Bagaimana saya bisa menyimpan nilai sedemikian rupa?
javascript
dictionary
hashtable
George2
sumber
sumber
Jawaban:
Gunakan objek JavaScript sebagai array asosiatif .
Buat objek dengan
Sintaks alternatif untuk hal yang sama adalah:
Jika Anda juga dapat membuat kunci untuk menilai peta objek dengan sintaks berikut
sumber
new Array()
tidak disukai. Artikel itu akhirnya menyebutkan kelemahannya dan menyarankannew Object()
atau{}
sebagai alternatif yang disukai, tapi itu sudah mendekati akhir dan saya khawatir sebagian besar pembaca tidak akan sejauh itu.var obj1 = {}; var obj2 = {}; var table= {}; table[obj1] = "A"; table[obj2] = "B"; alert(table[obj1]); //displays B
karena tidak dapat membedakan antara kunci obj1 dan obj2; keduanya dikonversi menjadi string dan menjadi "Object". Gagal total, dan membuat serialisasi tipe-aman dengan referensi dan referensi siklik menjadi sulit atau tidak berfungsi dalam JavaScript. Mudah dalam Flash / AS3.Point.prototype.equals = function(obj) { return (obj instanceof Point) && (obj.x === this.x) && (obj.y === this.y); };
for... in
karena kamus akan mengulangi kunci-kuncinya, jadiObject.keys
sepertinya ada penempatan di sana.Object.keys
mengembalikan array kunci dari kamus, danfor... in
untuk loop array yang lebih nya "kunci", yang untuk array yang indeksnya, bukan nilai-nilainya.Jika Anda berasal dari bahasa berorientasi objek, Anda harus memeriksa artikel ini .
sumber
Semua browser modern mendukung objek Peta javascript . Ada beberapa alasan yang menjadikan penggunaan Peta lebih baik daripada Objek:
Contoh:
Jika Anda ingin kunci yang tidak dirujuk dari objek lain menjadi sampah yang dikumpulkan, pertimbangkan untuk menggunakan WeakMap alih-alih Peta.
sumber
Map
hampir tidak berguna ketika kunci Anda adalah objek tetapi harus dibandingkan dengan nilai, bukan referensi.Kecuali Anda memiliki alasan khusus untuk tidak melakukannya, cukup gunakan objek normal. Properti objek di Javascript dapat dirujuk menggunakan sintaksis gaya hashtable:
Keduanya
foo
danbar
elemen sekarang dapat dirujuk sebagai:Tentu saja ini berarti kunci Anda harus berupa string. Jika bukan string, mereka dikonversi secara internal ke string, jadi mungkin masih berfungsi, YMMV.
sumber
var hash = {}; hash[1] = "foo"; alert(hash["1"]);
alert "foo".var dict = {}; dict.key1 = "val1"; dict["key2"] = "val2";
elemen key1 dict dapat dirujuk secara setara oleh keduanyadict["key1"]
dandict.key1
.Karena setiap objek di JS berperilaku seperti - dan umumnya diimplementasikan sebagai - hashtable, saya hanya pergi dengan itu ...
sumber
if (hashSweetHashTable.foo)
harus memasukkan blok if jikafoo
diset.jadi di C # kodenya terlihat seperti:
atau
dalam JavaScript
Objek kamus C # berisi metode yang berguna seperti
dictionary.ContainsKey()
dalam JavaScript kita bisa menggunakanhasOwnProperty
sejenisnyasumber
hasOwnProperty
Jika Anda memerlukan kunci Anda untuk menjadi objek apa pun daripada hanya string maka Anda bisa menggunakan jshashtable saya .
sumber
sumber
{}
bukan array:[]
ataunew Array()
jika Anda berniat untuk memiliki kunci string, jika tidak mesin js memiliki masalah - ia akan melihat 2 jenis untuk 1 variabel yang berarti tidak ada optimasi atau akan berjalan dengan array dan menyadari itu harus berubah menjadi objek (kemungkinan alokasi ulang).Saya membuat ini untuk mencapai beberapa masalah, seperti pemetaan kunci objek, kemampuan enumerasi (dengan
forEach()
metode) dan kliring.Dokumentasi kelas
Hashtable
Metode:
get(key)
Mengembalikan nilai yang terkait dengan kunci yang ditentukan.
Parameter::
key
Kunci dari mana mengambil nilai.put(key, value)
Mengaitkan nilai yang ditentukan ke kunci yang ditentukan.
Parameter::
key
Kunci yang mengaitkan nilai.value
: Nilai untuk dikaitkan dengan kunci.remove(key)
Menghapus kunci yang ditentukan dengan nilainya.
Parameter::
key
Kunci untuk menghapus.clear()
Menghapus semua hashtable, menghapus kunci dan nilai.
indexOfKey(key)
Mengembalikan indeks kunci yang ditentukan, berdasarkan pada urutan penambahan.
Parameter::
key
Kunci yang mendapatkan indeks.indexOfValue(value)
Mengembalikan indeks dari nilai yang ditentukan, berdasarkan pada urutan penambahan.
Parameter::
value
Nilai yang mendapatkan indeks.Catatan:
Informasi ini diambil dengan
indexOf()
metode array, sehingga membandingkan objek hanya dengantoString()
metode.entryAt(index)
Mengembalikan objek dengan dua properti: kunci dan nilai, mewakili entri pada indeks yang ditentukan.
Parameter::
index
Indeks entri untuk mendapatkan.containsKey(key)
Mengembalikan apakah hashtable berisi kunci yang ditentukan.
Parameter::
key
Kunci untuk memeriksa.containsValue(value)
Mengembalikan apakah hashtable berisi nilai yang ditentukan.
Parameter::
value
Nilai yang akan diperiksa.forEach(iterator)
Iterasi semua entri dalam yang ditentukan
iterator
.Parameter:
value
: Sebuah metode dengan 3 parameter:key
,value
danindex
, di manaindex
merupakan indeks entri.Properti:
length
(Hanya Baca )Mendapat hitungan entri dalam hashtable.
keys
(Hanya Baca )Mendapat array dari semua kunci di hashtable.
values
(Hanya baca )Mendapat array dari semua nilai dalam hashtable.
entries
(Hanya baca )Mendapat array dari semua entri di hashtable. Mereka direpresentasikan dalam bentuk metode yang sama
entryAt()
.sumber
https://gist.github.com/alexhawkins/f6329420f40e5cafa0a4
sumber
Anda dapat membuatnya menggunakan seperti berikut:
sumber