Apakah ada cara untuk mendapatkan (dari suatu tempat) jumlah elemen dalam objek javascript ?? (yaitu kompleksitas waktu konstan).
Saya tidak dapat menemukan properti atau metode yang mengambil informasi itu. Sejauh ini saya hanya bisa memikirkan melakukan iterasi melalui seluruh koleksi, tapi itu waktu linier.
Aneh tidak ada akses langsung ke ukuran objek, bukan begitu.
EDIT:
Saya sedang berbicara tentang Object
objek (bukan objek secara umum):
var obj = new Object ;
javascript
collections
elements
javascript-objects
Mendapatkan gratis
sumber
sumber
Jawaban:
Meskipun implementasi JS mungkin melacak nilai seperti itu secara internal, tidak ada cara standar untuk mendapatkannya.
Di masa lalu, varian Javascript Mozilla mengekspos non-standar
__count__
, tetapi telah dihapus dengan versi 1.8.5.Untuk skrip lintas browser Anda terjebak dengan iterasi eksplisit atas properti dan memeriksa
hasOwnProperty()
:Dalam kasus implementasi yang mampu ECMAScript 5, ini juga dapat ditulis sebagai (Kudos to Avi Flax )
Ingatlah bahwa Anda juga akan kehilangan properti yang tidak dapat dihitung (misalnya, array
length
).Jika Anda menggunakan kerangka kerja seperti jQuery, Prototype, Mootools, $ anything-the-latest-hype, periksa apakah mereka datang dengan API koleksi mereka sendiri, yang mungkin merupakan solusi yang lebih baik untuk masalah Anda daripada menggunakan objek JS asli.
sumber
__count__
tidak ada :(hasOwnProperty()
?Untuk melakukan ini di lingkungan yang kompatibel dengan ES5
(Dukungan browser dari sini )
(Doc on Object.keys di sini , termasuk metode yang dapat Anda tambahkan ke browser non-ECMA5)
sumber
jika Anda sudah menggunakan jQuery di build Anda, lakukan ini:
Ini berfungsi dengan baik untuk saya pada objek, dan saya sudah memiliki jQuery sebagai ketergantungan.
sumber
sumber
AFAIK, tidak ada cara untuk melakukan ini dengan andal, kecuali Anda beralih ke array. Sejujurnya, tidak tampak aneh - bagi saya tampaknya cukup lurus ke depan bahwa array dapat dihitung, dan objek tidak.
Mungkin yang paling dekat yang akan Anda dapatkan adalah seperti ini
Tapi ini menimbulkan masalah, atau setidaknya pertanyaan. Semua properti yang dibuat pengguna dihitung, termasuk fungsi _length itu sendiri! Dan sementara dalam contoh sederhana ini Anda dapat menghindarinya hanya dengan menggunakan fungsi normal, itu tidak berarti Anda dapat menghentikan skrip lain melakukan ini. jadi apa yang kamu lakukan? Abaikan properti fungsi?
Pada akhirnya, saya pikir Anda mungkin harus membuang ide untuk membuat objek Anda dapat dihitung dan mencari cara lain untuk melakukan apa pun yang Anda lakukan.
sumber
Konsep bilangan / panjang / dimensi tidak benar-benar masuk akal untuk sebuah Objek, dan membutuhkannya menunjukkan Anda benar-benar menginginkan Array untuk saya.
Edit: Tunjukkan kepada saya bahwa Anda menginginkan O (1) untuk ini. Sepengetahuan saya, tidak ada cara seperti itu, saya khawatir.
sumber