Existe-t-il un moyen d'obtenir (de quelque part) le nombre d'éléments dans un objet javascript ?? (c.-à-d. complexité en temps constant).
Je ne trouve pas de propriété ou de méthode permettant de récupérer ces informations. Jusqu'à présent, je ne peux penser qu'à faire une itération dans toute la collection, mais c'est du temps linéaire.
C'est étrange qu'il n'y ait pas d'accès direct à la taille de l'objet, vous ne pensez pas.
EDIT:
je parle de l' Object
objet (pas des objets en général):
var obj = new Object ;
Réponses:
Bien que les implémentations JS puissent suivre une telle valeur en interne, il n'y a pas de moyen standard de l'obtenir.
Dans le passé, la variante Javascript de Mozilla exposait le non-standard
__count__
, mais elle a été supprimée avec la version 1.8.5.Pour les scripts inter-navigateurs, vous êtes obligé d'itérer explicitement les propriétés et de vérifier
hasOwnProperty()
:Dans le cas d'implémentations compatibles ECMAScript 5, cela peut également être écrit comme (Félicitations à Avi Flax )
Gardez à l'esprit que vous manquerez également des propriétés qui ne sont pas énumérables (par exemple, un tableau
length
).Si vous utilisez un framework tel que jQuery, Prototype, Mootools, $ peu importe le dernier battage publicitaire, vérifiez s'ils sont fournis avec leur propre API de collections, ce qui pourrait être une meilleure solution à votre problème que d'utiliser des objets JS natifs.
la source
__count__
est parti :(hasOwnProperty()
?Pour ce faire dans n'importe quel environnement compatible ES5
(Prise en charge du navigateur à partir d' ici )
(Doc sur Object.keys ici , inclut la méthode que vous pouvez ajouter aux navigateurs non ECMA5)
la source
si vous utilisez déjà jQuery dans votre build, procédez comme suit:
Cela fonctionne très bien pour moi sur les objets, et j'avais déjà jQuery comme dépendance.
la source
la source
AFAIK, il n'y a aucun moyen de le faire de manière fiable, sauf si vous passez à un tableau. Ce qui, honnêtement, ne semble pas étrange - il me semble assez simple que les tableaux soient dénombrables et que les objets ne le soient pas.
Probablement le plus proche que vous obtiendrez est quelque chose comme ça
Mais cela crée des problèmes, ou du moins des questions. Toutes les propriétés créées par l'utilisateur sont comptées, y compris la fonction _length elle-même! Et bien que dans cet exemple simple, vous puissiez l'éviter en utilisant simplement une fonction normale, cela ne signifie pas que vous pouvez empêcher d'autres scripts de le faire. donc que fais-tu? Ignorer les propriétés de la fonction?
En fin de compte, je pense que vous devriez probablement abandonner l'idée de rendre vos objets dénombrables et trouver une autre façon de faire tout ce que vous faites.
la source
Le concept de nombre / longueur / dimensionnalité n'a pas vraiment de sens pour un objet, et en avoir besoin suggère que vous voulez vraiment un tableau pour moi.
Edit: m'a fait remarquer que vous voulez un O (1) pour cela. Pour autant que je sache, aucun moyen n'existe, j'en ai peur.
la source