Ketika saya membuat array JavaScript baru, dan menggunakan integer sebagai kunci, setiap elemen dari array tersebut hingga integer dibuat sebagai tidak terdefinisi.
Sebagai contoh:
var test = new Array();
test[2300] = 'Some string';
console.log(test);
akan menampilkan 2298 undefined dan satu 'Some string'.
Bagaimana cara mendapatkan JavaScript agar menggunakan 2300 sebagai string alih-alih integer, atau bagaimana cara mencegahnya membuat 2299 indeks kosong?
javascript
associative-array
Peter Mortensen
sumber
sumber
0.25
dan.25
selesaikan ke string yang sama"0.25"
. Jadi, jika Anda menggunakan kunci pecahan, Anda dapat mengambil milik kunci numerik yang ditetapkan0.25
menggunakan0.25
,.25
,"0.25"
tapi tidak".25"
.Anda bisa menggunakan objek:
sumber
Seperti yang dikatakan orang, JavaScript akan mengubah string angka menjadi integer, jadi tidak mungkin untuk digunakan secara langsung pada array asosiatif, tetapi objek akan bekerja untuk Anda dengan cara yang sama menurut saya.
Anda dapat membuat objek Anda:
Dan tambahkan nilai saat array berfungsi:
Ini akan memberi Anda:
Setelah itu Anda dapat mengaksesnya seperti array dalam bahasa lain mendapatkan kuncinya:
Saya telah menguji dan bekerja.
sumber
Jika kasus penggunaan menyimpan data dalam koleksi maka ECMAScript 6 menyediakan
Map
tipenya.Hanya lebih berat untuk menginisialisasi.
Berikut ini contohnya:
Hasil:
sumber
Menyusun jawaban lain:
Obyek
Saat menggunakan angka sebagai kunci properti baru, angka tersebut berubah menjadi string:
Saat mengakses nilai properti menggunakan nomor yang sama, nomor tersebut diubah menjadi string lagi:
Namun, ketika mendapatkan kunci dari objek, mereka tidak akan diubah kembali menjadi angka:
Peta
ECMAScript 6 memungkinkan penggunaan objek Peta ( dokumentasi , perbandingan dengan Objek ). Jika kode Anda dimaksudkan untuk diinterpretasikan secara lokal atau tabel kompatibilitas ECMAScript 6 tampak cukup hijau untuk tujuan Anda, pertimbangkan untuk menggunakan Peta:
Tidak ada jenis konversi yang dilakukan, menjadi lebih baik dan lebih buruk:
sumber
Gunakan objek alih-alih array. Array dalam JavaScript bukanlah array asosiatif. Mereka adalah objek dengan sihir yang terkait dengan properti apa pun yang namanya terlihat seperti bilangan bulat. Keajaiban itu bukanlah yang Anda inginkan jika Anda tidak menggunakannya sebagai struktur seperti larik tradisional.
sumber
Coba gunakan Object, bukan Array:
sumber
var a = []; a[Math.pow(2, 30)] = 'hello';
dan Anda tidak akan melihat penggunaan browser / memori melonjak lebih dari satu gigabyte, tetapi yang Anda lihata.length
adalah 1073741824. VM dengan jelas menyimpan beberapa "array" menggunakan beberapa struktur data lain, saya rasa hanya sebuah hashtable, setidaknya jika mereka cukup jarang.Dapatkan nilai untuk properti array asosiatif jika nama properti adalah bilangan bulat:
Dimulai dengan array asosiatif dimana nama propertinya adalah integer:
Dorong item ke array:
Ulangi array dan lakukan sesuatu dengan nilai properti.
Output konsol akan terlihat seperti ini:
Seperti yang Anda lihat, Anda bisa mengatasi batasan array asosiatif dan memiliki nama properti berupa integer.
CATATAN: Array asosiatif dalam contoh saya adalah konten JSON yang akan Anda miliki jika Anda membuat serial objek <string, string> [] Kamus.
sumber
Gunakan objek - dengan integer sebagai kuncinya - daripada array.
sumber
Terkadang saya menggunakan prefiks untuk kunci saya. Sebagai contoh:
Sekarang Anda tidak memiliki masalah untuk mengaksesnya.
sumber