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.

Relaterte artikler