samlinger - Antall elementer i et JavaScript-objekt
Finnes det en måte å få (fra et sted) antall elementer i et Javascript-objekt?? (dvs. konstant tidskompleksitet).
Jeg kan ikke finne en egenskap eller metode som henter den informasjonen. Så langt kan jeg bare tenke meg å gjøre en iterasjon gjennom hele samlingen, men det er lineær tid.
Det er rart at det ikke er direkte tilgang til størrelsen på objektet, ikke sant.
REDIGER:
Jeg snakker om Object-objektet (ikke objekter generelt):
var obj = new Object ;
Svar #1
Selv om JS-implementasjoner kan holde oversikt over en slik verdi internt, finnes det ingen standard måte å få tak i den på.
Tidligere eksponerte Mozillas Javascript-variant den ikke-standardiserte __count__, men den har blitt fjernet med versjon 1.8.5.
For tverrnettleserskripting må du iterere eksplisitt over egenskapene og sjekke hasOwnProperty():
function countProperties(obj) {
var count = 0;
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
++count;
}
return count;
}
I tilfelle ECMAScript 5-kompatible implementeringer, kan dette også skrives som (Ros til Avi Flax)
function countProperties(obj) {
return Object.keys(obj).length;
}
Husk at du også vil gå glipp av egenskaper som ikke er tellelige (f.eks. en arrays length).
Hvis du bruker et rammeverk som jQuery, Prototype, Mootools, $whatever-the-newest-hype, sjekk om de kommer med sitt eget samlings-API, som kan være en bedre løsning på problemet ditt enn å bruke native JS-objekter.
Svar #2
For å gjøre dette i et hvilket som helst ES5-kompatibelt miljø
Object.keys(obj).length
(Nettleserstøtte her)
(Dokumentasjon om Object.keys her, inkludert metode du kan legge til i ikke-ECMA5-nettlesere)
Svar #3
hvis du allerede bruker jQuery i byggingen din, gjør bare dette:
$(yourObject).length
Det fungerer bra for meg på objekter, og jeg hadde allerede jQuery som en avhengighet.
