Javascript zliczanie ilości obiektów w obiekcie [duplikat]
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.
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.
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.
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;
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