Javascript zliczanie ilości obiektów w obiekcie [duplikat]

to pytanie ma już odpowiedzi tutaj : Jak efektywnie policzyć liczbę kluczy / właściwości obiektu w JavaScript? (20 odpowiedzi) Zamknięty 7 lat temu .

Mam obiekt coś w stylu:

Object {0=Object, 1=Object, 2=Object} // Output from console.log(obj.Data);

Ale nie ma sposobu, abym mógł policzyć liczbę obiektów w obiekcie, a następnie ostatecznie uzyskać wartość atrybutu z obiektów podrzędnych.

Próbowałem

console.log(obj.Data[0].length); // It does not work

console.log(obj.Data.length); // It does not work

To dla mnie trochę trudne. Mam nadzieję, że możecie pomóc.

Author: Bryan Learn, 2013-06-07

3 answers

Najprostszym sposobem, aby to zrobić, z doskonałą wydajnością i kompatybilnością zarówno ze starymi, jak i nowymi przeglądarkami, jest umieszczenie Lo-Dash lub podkreślenia na swojej stronie.

Następnie możesz użyć _.size(object) lub _.keys(object).length

Dla Twojego obj.Data, możesz to przetestować za pomocą:

console.log( _.size(obj.Data) );

Lub:

console.log( _.keys(obj.Data).length );

Lo - Dash i Underscore są doskonałymi bibliotekami; każda z nich byłaby bardzo przydatna w Twoim kodzie. (Są do siebie dość podobne; Lo-Dash jest nowszą wersją z pewnymi zaletami.)

Alternatywnie, możesz umieścić tę funkcję w kodzie, który po prostu przecina właściwości obiektu i zlicza je:

function ObjectLength( object ) {
    var length = 0;
    for( var key in object ) {
        if( object.hasOwnProperty(key) ) {
            ++length;
        }
    }
    return length;
};

Możesz to przetestować za pomocą:

console.log( ObjectLength(obj.Data) );

Ten kod nie jest tak szybki, jak mógłby być w nowoczesnych przeglądarkach. Dla wersji, która jest znacznie szybsza w nowoczesnych przeglądarkach i nadal działa w Starych, można użyć:

function ObjectLength_Modern( object ) {
    return Object.keys(object).length;
}

function ObjectLength_Legacy( object ) {
    var length = 0;
    for( var key in object ) {
        if( object.hasOwnProperty(key) ) {
            ++length;
        }
    }
    return length;
}

var ObjectLength =
    Object.keys ? ObjectLength_Modern : ObjectLength_Legacy;

I jak poprzednio, przetestuj go za pomocą:

console.log( ObjectLength(obj.Data) );

Ten kod używa Object.keys(object).length w nowoczesnych przeglądarkach i wraca do liczenia w pętli dla starych przeglądarek.

Ale jeśli masz zamiar pracować nad tym wszystkim, polecam użycie Lo-Dash lub Underscore zamiast tego i uzyskać wszystkie korzyści, jakie oferują te biblioteki.

Ustawiłem jsPerf, który porównuje prędkość tych różnych podejść . Uruchom go w dowolnej przeglądarce, którą możesz dodać do testów.

Dzięki Barmar za sugerowanie Object.keys dla nowszych przeglądarek w jego odpowiedz.

 127
Author: Michael Geary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:33

W ostatnich przeglądarkach możesz użyć:

Object.keys(obj.Data).length

Zobacz MDN

W starszych przeglądarkach użyj pętli for-in w odpowiedzi Michaela Geary ' ego.

 78
Author: Barmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-07 05:59:36

Wypróbuj Demo Tutaj

var list ={}; var count= Object.keys(list).length;
 33
Author: Sudarshan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-07 06:08:20